永发信息网

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

答案:1  悬赏:50  手机版
解决时间 2021-05-01 17:40
  • 提问者网友:抽煙菂渘情少年
  • 2021-04-30 23:27

#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);


}

最佳答案
  • 五星知识达人网友:英雄的欲望
  • 2021-04-30 23:51

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


#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;


}

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯