标题:
关于C语言构建二叉树程序的问题!
[打印本页]
作者:
2602482600
时间:
2020-3-19 18:26
标题:
关于C语言构建二叉树程序的问题!
输入8个整数构建一个二叉树,对于二叉树节点,比当前节点少于或等于的放在树的左边子节点,大于的放在右边子节点。
以下是我写的代码,输出不出来这是为什么呢
filehelper_1584612346713_779.jpg
(15.71 KB, 下载次数: 25)
下载附件
2020-3-19 18:25 上传
#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;
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1