BST迭代前序遍历的无限循环

时间:2014-12-06 00:22:25

标签: c

我试图按预先顺序迭代遍历BST,但是这个功能在打印时陷入了无限循环。有人可以告诉我为什么会这样吗?

1 typedef struct node_{
2     int data;
3     struct node_* left;
4     struct node_* right;
5 }BST; 

22 void preorder(BST* tree){
23     if(tree==NULL){
24         return;
25     }
26     // create stack 
27     stack* stack=create_stack();
28     // push data onto stack
29     push(stack,tree->data);
30     while(isEmpty(stack)==0){
31         struct node_ *node;
32         node->data=top(stack);
33         printf("%d ",node->data);
34         // pop value off stack
35         pop(stack);
36         if(node->right!=NULL){
37             //push right child onto stack
38             push(stack,node->right->data);
39         }
40         if(node->left!=NULL){
41             // push left child onto stack
42             push(stack,node->left->data);
43         }
44     }
45 }

1 个答案:

答案 0 :(得分:1)

您的循环永远不会结束,因为node->rightnode->left指向随机内存位置。 node的价值是多少?你还没有为它分配任何东西。它的价值是随机的。

另一个问题是您将tree->data推入堆栈。你实际上想把tree推到堆栈上。然后,您可以从堆栈中弹出一个节点并将其分配给node。现在,您可以打印node->data并检查node的孩子。