永发信息网

看我的二叉树的建立和先根遍历有什么问题,能输入,就是在环境中出不来了,如何改

答案:1  悬赏:50  手机版
解决时间 2021-05-01 17:40

#include<stdio.h>
#include<malloc.h>
typedef struct Bnode
{
char data;
struct Bnode *lchild;
struct Bnode *rchild;

}Btnode, Btree;
Btree CreatTree()
{
Btree *root;
char ch;
scanf("%c",&ch);
if(ch!=NULL)
{
root=(Btree *)malloc(sizeof(Btnode));
root->data=ch;
*root->lchild=CreatTree();
*root->rchild=CreatTree();

}


}
void preorder(Btree *root)
{
if(root!=NULL)
{
printf("%c",root->data);
preorder( root->lchild);
preorder( root->rchild);

}


}
main()
{
Btree *root;
CreatTree();
preorder(root);


}

最佳答案

程序代码:(这是我的,你可以借鉴一下,运行没有问题,最后有测试数据及测试结果)


#include <iostream.h>
#include <stdlib.h>


struct tree//声明树的结构
{
struct tree *left,*right;
int data;
};
typedef struct tree treenode;//声明新类型树结构
typedef treenode *b_tree;//声明二叉树链表


//插入二叉树节点
b_tree insert_node(b_tree root, int node)
{
b_tree newnode ;//声明树根指针
b_tree currentnode;//声明目前节点指针
b_tree parentnode;//声明父节点指针


//申请新节点的内存空间
newnode=(b_tree)malloc(sizeof(treenode));
newnode->data=node;//存入节点内容
newnode->right=NULL;//初始化右指针
newnode->left=NULL;


if(root==NULL)return newnode;
else
{
currentnode=root;//存储目前节点指针
while(currentnode!=NULL)
{
parentnode=currentnode;//存储父节点指针
if(currentnode->data>node)//比较节点的数值大小
currentnode=currentnode->left;//左子树
else currentnode=currentnode->right;//右子树
}
if(parentnode->data>node)//将父节点和子节点做链接
parentnode->left=newnode;//子节点为父节点的左子树
else parentnode->right=newnode;//子节点为父节点的右子树
}
return root;//返回根节点的指针
}


//建立二叉树
b_tree create_btree(int *data,int len)
{
b_tree root=NULL;
for(int i=0;i<len;i++)
root=insert_node(root,data[i]);
return root;
}


//二叉树前序遍历
void pre_order(b_tree point)
{
if(point!=NULL)//遍历的终止条件
{
cout<<point->data<<" ";//打印节点的内容
pre_order(point->left);//遍历左子树
pre_order(point->right);//遍历右子树
}
}


//主程序
void main()
{
b_tree root=NULL;//树根指针
int value;//暂存读入将要遍历的数值
int nodelist[20];
int index=0;
cout<<"请输入将要参与遍历的数值:"<<endl;
//读数值到数组中,
//这是一种不知道数组元素到底有几个的情况下的输入方法
cin>>value;
while(value!=0)
{
nodelist[index]=value;
index++;
cin>>value;
}
//建立二叉树
root=create_btree(nodelist,index);
//前序遍历
cout<<"前序遍历二叉树结果如下:"<<endl;
pre_order(root);
cout<<endl;


}

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
食用小苏打的作用
nokia的那款智能机的GPS导航搜星最多最快?
王家巷社区在什么地方啊,我要过去处理事情
“白色污染”是由什么引起
什么是杂牌货
死亡港口在哪,dnf遗忘之地死亡港口boss图怎样
送男生纯白色的围巾可以的吧??
上大学的同志来啊,你们一个月生活费多少啊
哪个晓得长沙哪里最好玩?
发烧39.4度
孕妇感冒桑子痛该怎么办
冒险岛用笔记本玩怎样设置键位最舒服?
老豆腐菜馆在哪里啊,我有事要去这个地方
僵尸是怎样行成的?它跟鬼区别在哪?
在哪可以下载免费歌曲
推荐资讯
如何从文化的角度看待《大话西游》
机械制造设计及自动化是什么样的专业?
二胎超生罚款标准
8月30是哪个星座啊!
天龙八部怎么买yb便宜点,
西咸新区新天路汽车销售服务有限公司地址在什
吞食天地2极品孔融怎么加点?
请问从武汉自驾到咸丰要几个小时
QB换世纪天成点卡
QQ会员,详情,
手机上QQ上不去,一退出就为什么老死机
她好像要放弃我了,我该怎么办?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?