树元素未按正确顺序显示
Tree elements not displaying in correct order
我正在尝试构建一个简单的树程序并以中序、前序和后序格式遍历它。我使用的代码是这样的:
#include <stdio.h>
#include <stdlib.h>
struct node
{
int info;
struct node* lchild;
struct node* rchild;
};
typedef struct node* NODE;
NODE getNode()
{
NODE temp;
temp = (NODE)malloc(sizeof(struct node));
return temp;
}
NODE insert(NODE root,int item)
{
NODE temp,prev,cur;
temp = getNode();
temp->info = item;
temp->lchild = NULL;
temp->rchild = NULL;
if(root==NULL)
{return temp;}
prev = NULL;
cur = root;
while(cur!=NULL)
{
prev = cur;
if(item<cur->info)
{
cur = cur->lchild;
}
else if(item>cur->info)
{
cur = cur->rchild;
}
}
if(item<prev->info)
{
prev->lchild = temp;
}
else if(item>prev->info)
{
prev->rchild = temp;
}
return root;
}
void inorderTraversal(NODE root)
{
if(root!=NULL)
{
inorderTraversal(root->lchild);
printf("%d\t",root->info);
inorderTraversal(root->rchild);
}
else
{
return;
}
}
void preorderTraversal(NODE root)
{
if(root!=NULL)
{
printf("%d\t",root->info);
preorderTraversal(root->lchild);
preorderTraversal(root->rchild);
}
else
{
return;
}
}
void postorderTraversal(NODE root)
{
if(root!=NULL)
{
postorderTraversal(root->lchild);
postorderTraversal(root->rchild);
printf("%d\t",root->info);
}
else
{
return;
}
}
int main() {
NODE root;
root = getNode();
root = NULL;
root = insert(root,10);
root = insert(root,20);
root = insert(root,15);
printf("Root is: %d\n",root->info);
printf("Inorder Traversal is :");
inorderTraversal(root);
printf("\n");
printf("Preorder traversal is :");
preorderTraversal(root);
printf("\n");
printf("Postorder traversal is :");
postorderTraversal(root);
printf("\n");
return 0;
}
我得到的输出是这样的:
根是:10
中序遍历为:10 15 20
前序遍历为:10 20 15
后序遍历为:15 20 10
即10 被指定为根,理想情况下它应该是 15,左边 10,右边 15。
这里有什么错误,我该如何解决?
谢谢!
您最终得到的树结构如下所示
10
\
20
/
15
遍历顺序如下:
按顺序:10 15 20
预购:10 20 15
Post-顺序:15 20 10
BST 确实保持 属性 左子树中的元素小于右子树中的元素。但是,它们不像 AVL 或红黑树那样 self-balancing 。
我正在尝试构建一个简单的树程序并以中序、前序和后序格式遍历它。我使用的代码是这样的:
#include <stdio.h>
#include <stdlib.h>
struct node
{
int info;
struct node* lchild;
struct node* rchild;
};
typedef struct node* NODE;
NODE getNode()
{
NODE temp;
temp = (NODE)malloc(sizeof(struct node));
return temp;
}
NODE insert(NODE root,int item)
{
NODE temp,prev,cur;
temp = getNode();
temp->info = item;
temp->lchild = NULL;
temp->rchild = NULL;
if(root==NULL)
{return temp;}
prev = NULL;
cur = root;
while(cur!=NULL)
{
prev = cur;
if(item<cur->info)
{
cur = cur->lchild;
}
else if(item>cur->info)
{
cur = cur->rchild;
}
}
if(item<prev->info)
{
prev->lchild = temp;
}
else if(item>prev->info)
{
prev->rchild = temp;
}
return root;
}
void inorderTraversal(NODE root)
{
if(root!=NULL)
{
inorderTraversal(root->lchild);
printf("%d\t",root->info);
inorderTraversal(root->rchild);
}
else
{
return;
}
}
void preorderTraversal(NODE root)
{
if(root!=NULL)
{
printf("%d\t",root->info);
preorderTraversal(root->lchild);
preorderTraversal(root->rchild);
}
else
{
return;
}
}
void postorderTraversal(NODE root)
{
if(root!=NULL)
{
postorderTraversal(root->lchild);
postorderTraversal(root->rchild);
printf("%d\t",root->info);
}
else
{
return;
}
}
int main() {
NODE root;
root = getNode();
root = NULL;
root = insert(root,10);
root = insert(root,20);
root = insert(root,15);
printf("Root is: %d\n",root->info);
printf("Inorder Traversal is :");
inorderTraversal(root);
printf("\n");
printf("Preorder traversal is :");
preorderTraversal(root);
printf("\n");
printf("Postorder traversal is :");
postorderTraversal(root);
printf("\n");
return 0;
}
我得到的输出是这样的:
根是:10
中序遍历为:10 15 20
前序遍历为:10 20 15
后序遍历为:15 20 10
即10 被指定为根,理想情况下它应该是 15,左边 10,右边 15。 这里有什么错误,我该如何解决?
谢谢!
您最终得到的树结构如下所示
10
\
20
/
15
遍历顺序如下: 按顺序:10 15 20 预购:10 20 15 Post-顺序:15 20 10
BST 确实保持 属性 左子树中的元素小于右子树中的元素。但是,它们不像 AVL 或红黑树那样 self-balancing 。