请问C语言如何创建二叉树????

BTNode *CreateBTree()
{
BTNode *newnode;
int num;
printf("请输入数据:");
scanf("%d", &num);
if(num == 0)
{
newnode = NULL;
}
else
{
newnode = (BTNode *)malloc(sizeof(BTNode));
newnode->data = num;
newnode->lchild = CreateBTree();
newnode->rchild = CreateBTree();
}
return newnode;
}

不知道我这样写是否正确 而且 我不知道 什么时候可以退出这个函数
比如我想输入12345 我该怎样输入 才能正确退出? 我每次输入 输入三四个0之后才能退出 而且还提示我树是空的 显然结果不对 哪位可以帮帮我啊?????????谢谢了!

创建二叉树的源程序如下:

#include <cstdlib>

#include <stdio.h>

typedef struct node

{ //树的结点    

int data;    

struct node* left;   

struct node* right;

} Node;

typedef struct 

{ //树根    

Node* root;

} Tree; 

void insert(Tree* tree, int value)//创建树

{    

Node* node=(Node*)malloc(sizeof(Node));//创建一个节点   

node->data = value;    

node->left = NULL;    

node->right = NULL;    

if (tree->root == NULL)//判断树是不是空树  

{     

tree->root = node;  

}   

else 

{//不是空树   

Node* temp = tree->root;//从树根开始    

while (temp != NULL)       

{             

if (value < temp->data)//小于就进左儿子    

{              

if (temp->left == NULL)

{                 

temp->left = node;    

return;            

}             

else 

{//继续判断 

temp = temp->left;   

}          

}         

else {//否则进右儿子      

if (temp->right == NULL)     

{                   

temp->right = node; 

return;              

}               

else {//继续判断   

temp = temp->right;  

}         

}     

}  

}   

return;


void inorder(Node* node)//树的中序遍历

{   

if (node != NULL) 

{       

inorder(node->left);  

printf("%d ",node->data);  

inorder(node->right);   

}


int main()

{   

Tree tree; 

tree.root = NULL;//创建一个空树 

int n;    

scanf("%d",&n);    

for (int i = 0; i < n; i++)//输入n个数并创建这个树  

{      

int temp;  

scanf("%d",&temp);   

insert(&tree, temp);  

}    

inorder(tree.root);//中序遍历 

getchar(); 

getchar();  

return 0;

}


扩展资料:

简单二叉树定义范例:此树的顺序结构为:ABCDE

#include <cstdlib>

#include <stdio.h>

#include <string>

int main()

{

 node* p = newnode;

 node* p = head;

 head = p;

 string str;

 cin >> str;

 creat(p, str, 0)//默认根结点在str下标0的位置

  return 0;

}

//p为树的根结点(已开辟动态内存),str为二叉树的顺序存储数组ABCD##E或其他顺序存储数组,r当前结点所在顺序存储数组位置

void creat(node* p, string str, int r)

{

 p->data = str[r];

 if (str[r * 2 + 1] == '#' || r * 2 + 1 > str.size() - 1)p->lch = NULL;

 else

 {

  p->lch = newnode;

  creat(p->lch, str, r * 2 + 1);

 }

 if (str[r * 2 + 2] == '#' || r * 2 + 2 > str.size() - 1)p->rch = NULL;

 else

 {

  p->rch = newnode;

  creat(p->rch, str, r * 2 + 2);

 }

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-05
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTreeNode{
int data;
struct BiTreeNode *lchild,*rchild; //左右孩子指针
}BiTNode,*BiTree;
int main()
{
BiTree CreateBiTree();
void previsit(BiTree T);
BiTree BT=CreateBiTree();
puts("OK@!");
previsit(BT);
putchar('\n');
return 0;

}
//BiTNode *lchilde ,*rchilde;
BiTree CreateBiTree(){
//按先后顺序输入儿茶书中的节点值,*字符表示空 输入时按层次遍历输入
//构造二叉链表示的二叉树
char ch;
BiTree T;
scanf("%c",&ch);
if(ch=='*')
T=NULL;

else
{
T=(BiTNode*)malloc(sizeof(BiTNode));
if(!T)
return(0);
T->data=ch; //生成根节点
T->lchild=CreateBiTree(); //构造左子树
T->rchild=CreateBiTree(); //构造右子树
}
return T;
} //CreatBiTree
void previsit(BiTree T)
{
//采用二叉树链表存储结构,visit 是对数据结构表元素操作的应用函数。
if(T)
{
printf("%c ",T->data);
previsit(T->lchild);
previsit(T->rchild);
}

}
以上是简单构造和先序遍历,有问题可以留言本回答被提问者采纳
第2个回答  推荐于2017-09-16
二叉树是采用递归定义的,实现起来代码简洁(也许并不简单)。并且它在具体的计算机科学中有很重要的运用,是一种很重要的数据结构,二叉树有三种遍历和建立的方式。今天先学习一下它的建立和打印。
以下代码在Win-Tc1.9.1下编译通过。

#include <stdio.h>
#define ElemType char
//节点声明,数据域、左孩子指针、右孩子指针
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//先序建立二叉树
BiTree CreateBiTree(){
char ch;
BiTree T;
scanf("%c",&ch);
if(ch=='#')T=NULL;
else{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = ch;
T->lchild = CreateBiTree();
T->rchild = CreateBiTree();
}
return T;//返回根节点
}
//先序遍历二叉树
void PreOrderTraverse(BiTree T){
if(T){
printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}

//中序遍历
void InOrderTraverse(BiTree T){
if(T){
PreOrderTraverse(T->lchild);
printf("%c",T->data);
PreOrderTraverse(T->rchild);
}
}
//后序遍历
void PostOrderTraverse(BiTree T){
if(T){
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
printf("%c",T->data);
}
}
void main(){
BiTree T;
T = CreateBiTree();//建立
PreOrderTraverse(T);//输出
getch();
}