输入8个整数构建一个二叉树,对于二叉树节点,比当前节点少于或等于的放在树的左边子节点,大于的放在右边子节点。
以下是我写的代码,有bug这是为什么呢
#include <stdio.h>
#include <stdlib.h>
typedef struct node { //节点结构体
int data;
struct node *left;
struct node *right;
} Node;
Node* insert(Node *root,int value) //创建树
{
Node* node=(Node*)malloc(sizeof(Node));//创建一个节点
node->data = value;
node->left = NULL;
node->right = NULL;
if(root==NULL) //树为空则创建根
{
root==node;
}
else
{
Node *temp=root; //从树根开始判断
while(temp!=NULL)
{
if(value<=temp->data) //小于或等于进左儿子
{
if(temp->left==NULL) //若左儿子为空,直接写入
{
temp->left=node;
return root;
}
else //若左儿子不为空,继续判断
{
temp=temp->left;
}
}
else //大于进右儿子
{
if(temp->right==NULL) //同左儿子
{
temp->right=node;
return root;
}
else
{
temp=temp->right;
}
}
}
}
return root;
}
void PreOrderTree(Node* root) //前序遍历
{
if (root != NULL)
{
printf("%d ", root->data);
PreOrderTree(root->left);
PreOrderTree(root->right);
}
}
void InOrderTree(Node* root) //中序遍历
{
if (root != NULL)
{
PreOrderTree(root->left);
printf("%d ", root->data);
PreOrderTree(root->right);
}
}
void PostOrderTree(Node* root) //后序遍历
{
if (root != NULL)
{
PreOrderTree(root->left);
PreOrderTree(root->right);
printf("%d ", root->data);
}
}
int main()
{
int data[8];
int i;
printf("请输入8个整数\n");
for(i=0;i<8;i++)
{
scanf("%d",&data[i]);
}
Node *root=NULL; //创建空树
for(i=0;i<8;i++)
{
root=insert(root,data[i]);
}
printf("前序遍历为:\n");
PreOrderTree(root);
printf("\n");
printf("中序遍历为:\n");
InOrderTree(root);
printf("\n");
printf("后序遍历为:\n");
PostOrderTree(root);
printf("\n");
return 0;
}