二叉树的二叉链表创建

本文介绍了两种构建二叉树的方法:一是依据满二叉树方式进行编号建立链式二叉树,二是通过先序遍历输入节点信息来创建二叉树。这两种方法分别适用于不同场景,为读者提供了实用的二叉树构建思路。
 

⑴  按满二叉树方式建立 (补充)

    在此补充按满二叉树的方式对结点进行编号建立链式二叉树。对每个结点,输入i、ch。i : 结点编号,按从小到大的顺序输入;ch : 结点内容,假设是字符。在建立过程中借助一个一维数组S[n] ,编号为i的结点保存在S[i]中。

#define MAX_NODE  50

typedef struct BTNode

         char  data ;

         struct BTNode *Lchild , *Rchild ;

}BTNode ;

 

BTNode  *Create_BTree(void)  

  /*   建立链式二叉树,返回指向根结点的指针变量  */

         BTNode  *T , *p , *s[MAX_NODE] ; 

         char ch ;

         int i , j ;

         while (1)

         { 

                   scanf(“%d”, &i) ;

                   if  (i==0)  break ;   /*  以编号0作为输入结束  */

                   else 

              { 

                            ch=getchar() ;

                     p=(BTNode *)malloc(sizeof(BTNode)) ;

                     p–>data=ch ;

                     p–>Lchild=p–>Rchild=NULL ; 

                            s[i]=p ;

                     if (i==1)  T=p ;

                     else

                 { 

                                     j=i/2 ;    /*    j是i的双亲结点编号  */

                    if (i%2==0)  s[j]->Lchild=p ;

                      else  s[j]->Rchild=p ;

                }

                }

         }

         return(T) ;

}

 

⑵  按先序遍历方式建立

#define NULLKY  ‘?’

#define MAX_NODE   50

typedef struct BTNode

         char  data ;

         struct BTNode *Lchild , *Rchild ;

}BTNode ;

 

BTNode  *Preorder_Create_BTree(BTNode  *T)

 /*   建立链式二叉树,返回指向根结点的指针变量  */

         char ch ;

         ch=getchar() ;

         if  (ch==NULLKY)

         {   

                   T=NULL; 

                   return(T) ; 

         }

         else

         { 

                   T=(BTNode *)malloc(sizeof(BTNode)) ;

                   T–>data=ch ;

                   Preorder_Create_BTree(T->Lchild) ;

                   Preorder_Create_BTree(T->Rchild) ;

                   return(T) ;

         }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值