【发布时间】:2012-12-26 17:50:34
【问题描述】:
我想在二叉树上进行前序遍历时将元素添加到链接列表。我不想破坏BT,只是复制一个链表中的元素。这是我的代码 sn-p。
void Preorder(treeNode *node, Nodelist * head){
if(node==NULL){
return;
}
//printf("%d\n", node->data);
head = List_insert(head, node->data);
Preorder(node->left, head);
Preorder(node->right, head);
}
Nodelist * List_insert(Nodelist * head, int v)
{
Nodelist * p = Node_construct(v);
p->depth = 2222;
p -> next = head;
return p;
}
void List_print(Nodelist * head)
{
while (head != NULL)
{
printf("%d ", head -> value);
printf("%d ", head -> depth);
printf("\n");
head = head -> next;
}
printf("\n\n");
}
treeNode * Insert(treeNode *node,int data)
{
if(node==NULL)
{
treeNode *temp;
temp = (treeNode *)malloc(sizeof(treeNode));
temp -> data = data;
temp -> left = temp -> right = NULL;
return temp;
}
if(data >(node->data))
{
node->right = Insert(node->right,data);
}
else if(data < (node->data))
{
node->left = Insert(node->left,data);
}
return node;
}
int main(int argc, char**argv) {
treeNode *root = NULL;
root = Insert(root, 14);
root = Insert(root, 15);
root = Insert(root, 4);
root = Insert(root, 9);
root = Insert(root, 7);
root = Insert(root, 18);
root = Insert(root, 3);
root = Insert(root, 5);
root = Insert(root, 16);
root = Insert(root, 20);
root = Insert(root, 17);
Nodelist * head = NULL;
Preorder(root, head);
List_print(head);
return 0;
}
上面的代码什么也没打印。我认为问题在于使用 head = List_insert(head, node->data);在预购功能中。任何帮助都将不胜感激。
【问题讨论】:
-
我认为问题也在
List_insert.. -
如果你想将你的 BST 修改为 Linked list 然后按后缀顺序遍历,但那是另一回事..
标签: c linked-list binary-tree preorder