二叉树的顺序存储

这篇博客介绍了如何使用顺序存储结构表示二叉树,并提供了C++实现的初始化、创建、判断空树、获取深度等基本操作。此外,还详细讲解了先序、中序、后序和层序遍历二叉树的算法过程。
摘要由CSDN通过智能技术生成
// c6-1.h 二叉树的顺序存储表示
 #define MAX_TREE_SIZE 100 // 二叉树的最大结点数
 typedef TElemType SqBiTree[MAX_TREE_SIZE]; // 0号单元存储根结点

 struct position
 {
   int level,order; // 结点的层,本层序号(按满二叉树计算)
 };

// bo6-1.cpp 二叉树的顺序存储(存储结构由c6-1.h定义)的基本操作(23个)
 Status InitBiTree(SqBiTree T)
 { // 构造空二叉树T。因为T是固定数组,不会改变,故不需要&
   int i;
   for(i=0;i<MAX_TREE_SIZE;i++)
     T[i]=Nil; // 初值为空
   return OK;
 }

 void DestroyBiTree()
 { // 由于SqBiTree是定长类型,无法销毁
 }

 Status CreateBiTree(SqBiTree T)
 { // 按层序次序输入二叉树中结点的值(字符型或整型), 构造顺序存储的二叉树T
   int i=0;
 #if CHAR
   int l;
   char s[MAX_TREE_SIZE];
   cout<<"请按层序输入结点的值(字符),空格表示空结点,结点数≤"<<MAX_TREE_SIZE<<':'<<endl;
   gets(s); // 输入字符串
   l=strlen(s); // 求字符串的长度
   for(;i<l;i++) // 将字符串赋值给T
   {
     T[i]=s[i];
     if(i!=0&&T[(i+1)/2-1]==Nil&&T[i]!=Nil) // 此结点(不空)无双亲且不是根
     {
       cout<<"出现无双亲的非根结点"<<T[i]<<endl;
       exit(ERROR);
     }
   }
   for(i=l;i<MAX_TREE_SIZE;i++) // 将空赋值给T的后面的结点
     T[i]=Nil;
 #else
   cout<<"请按层序输入结点的值(整型),0表示空结点,输999结束。结点数≤"<<MAX_TREE_SIZE<<':'<<endl;
   while(1)
   {
     cin>>T[i];
     if(T[i]==999)
       break;
     if(i!=0&&T[(i+1)/2-1]==Nil&&T[i]!=Nil) // 此结点(不空)无双亲且不是根
     {
       cout<<"出现无双亲的非根结点"<<T[i]<<endl;
       exit(ERROR);
     }
     i++;
   }
   while(i<MAX_TREE_SIZE)
   {
     T[i]=Nil; // 将空赋值给T的后面的结点
     i++;
   }
 #endif
   return OK;
 }

 #def
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值