我想在二叉树上进行前序遍历时将元素添加到链接列表。我不想破坏BT,只是复制一个链表中的元素。这是我的代码片段。
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); 在预购功能中。任何帮助都将不胜感激。