【发布时间】:2011-06-06 01:55:58
【问题描述】:
我在下面的这段代码中有一个问题,它是有序二叉树程序的一部分。问题是,当我在输入中输入数字时,某些元素会丢失,并且总是会发生。我查看了代码,无法弄清楚为什么会发生这种情况。你能帮我解决这个问题吗?谢谢。
void insert_ord(int number, struct treenode *currentNode){
if(currentNode->flag == 0){
currentNode->number = number;
currentNode->flag = 1;
}
else{
if(number <= currentNode->number){
if(currentNode->left != NULL) insert_ord(number, currentNode->left);
else {
struct treenode *store = (struct treenode *)malloc(sizeof(struct treenode));
currentNode->left = store;
store->number = number;
store->left = store->right = NULL;
store->prev = currentNode;
}
}
if(number > currentNode->number){
if(currentNode->right != NULL) insert_ord(number, currentNode->right);
else {
struct treenode *store = (struct treenode *)malloc(sizeof(struct treenode));
currentNode->right = store;
store->number = number;
store->left = store->right = NULL;
store->prev = currentNode;
}
}
}
}
【问题讨论】:
-
不是所有的二叉树都是有序的吗?
-
是的,你是什么意思?
-
"我在下面的代码中有问题,它是有序二叉树程序的一部分。" - “有序”部分是多余的
-
@Mitch Wheat:不,我认为你的意思是二进制堆不是有序的。您还可以将二叉树用作“连接结构”,其中顶点处的值不以任何方式排序。
-
@Mitch:对不起,我从你的问题中假设你假设二叉树是完全有序的。堆是部分有序的,而连接树是无序的。
标签: c algorithm binary-tree