【发布时间】:2018-03-15 19:57:38
【问题描述】:
这似乎是一个简单的问题,我查看了另一个线程,似乎我正在做同样的事情,但是没有结果。
这是我迭代插入二叉搜索树的代码,以及结构和如何创建新节点:
typedef struct node {
int data;
struct node *left;
struct node *right;
} node;
node *create_node(int data) {
node *n = calloc(1, sizeof(node));
n->data = data;
return n;
}
node *BST_insert_iterative(node *root, int data) {
node *temp = root;
if (root == NULL)
return create_node(data);
while (temp != NULL) {
if (data > temp->data)
temp = temp->right;
else
temp = temp->left;
}
temp = create_node(data);
return root;
}
当我打印树时,我只收到第一个节点:
Inserting 8 into BST...
Inserting 50 into BST...
Inserting 74 into BST...
Inserting 59 into BST...
Inserting 31 into BST...
Inserting 73 into BST...
Inserting 45 into BST...
Inserting 79 into BST...
Inserting 24 into BST...
Inserting 10 into BST...
In order traversal
8
Height of tree: 0
但是,使用递归插入函数:
node *BST_insert(node *root, int data) {
if (root == NULL)
return create_node(data);
if (root->data >= data)
root->left = BST_insert(root->left, data);
else (root->data < data)
root->right = BST_insert(root->right, data);
return root;
}
它工作得很好,我明白了:
Inserting 8 into BST...
Inserting 50 into BST...
Inserting 74 into BST...
Inserting 59 into BST...
Inserting 31 into BST...
Inserting 73 into BST...
Inserting 45 into BST...
Inserting 79 into BST...
Inserting 24 into BST...
Inserting 10 into BST...
In order traversal
8
10
24
31
45
50
59
73
74
79
Height of tree: 4
【问题讨论】:
-
temp = create_node(data); return root;您正在分配给一个局部变量 (temp) 父级(左或右)指针永远不会知道。
标签: c iteration binary-tree binary-search-tree