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

论坛 期权论坛 期权     
2583774   2018-4-26 13:52   4225   2
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->l...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之后才能退出 而且还提示我树是空的 显然结果不对 哪位可以帮帮我啊?????????谢谢了!展开
分享到 :
0 人收藏

2 个回复

倒序浏览
2#
夜礼服假面MP  2级吧友 | 2018-4-30 02:00:12 发帖IP地址来自
二叉树是采用递归定义的,实现起来代码简洁(也许并不简单)。并且它在具体的计算机科学中有很重要的运用,是一种很重要的数据结构,二叉树有三种遍历和建立的方式。今天先学习一下它的建立和打印。
以下代码在Win-Tc1.9.1下编译通过。

#include
#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();
}
3#
lishuo_007  2级吧友 | 2018-4-30 02:00:13 发帖IP地址来自
#include
#include
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);
}

}
以上是简单构造和先序遍历,有问题可以留言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP