知识大全 数据结构考研分类复习真题 第六章 答案 (五)[51]

Posted 结点

篇首语:须知少年凌云志,曾许人间第一流。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第六章 答案 (五)[51]相关的知识,希望对你有一定的参考价值。

   .[题目分析] 二叉树的层次遍历序列的第一个结点是二叉树的根 实际上 层次遍历序列中的每个结点都是 局部根 确定根后 到二叉树的中序序列中 查到该结点 该结点将二叉树分为 左根右 三部分 若左 右子树均有 则层次序列根结点的后面应是左右子树的根 若中序序列中只有左子树或只有右子树 则在层次序列的根结点后也只有左子树的根或右子树的根 这样 定义一个全局变量指针R 指向层次序列待处理元素 算法中先处理根结点 将根结点和左右子女的信息入队列 然后 在队列不空的条件下 循环处理二叉树的结点 队列中元素的数据结构定义如下

  typedef struct   int lvl;         //层次序列指针 总是指向当前 根结点 在层次序列中的位置  int l h;         //中序序列的下上界  int f;           //层次序列中当前 根结点 的双亲结点的指针  int lr;          // 双亲的左子树  双亲的右子树  qnode;  BiTree Creat(datatype in[] level[] int n)  //由二叉树的层次序列level[n]和中序序列in[n]生成二叉树 n是二叉树的结点数  if (n< ) printf( 参数错误\\n ); exit( );  qnode s Q[];       //Q是元素为qnode类型的队列 容量足够大  init(Q); int R= ;  //R是层次序列指针 指向当前待处理的结点  BiTree p=(BiTree)malloc(sizeof(BiNode));          //生成根结点  p >data=level[ ]; p >lchild=null; p >rchild=null; //填写该结点数据  for (i= ; i<n; i++)     //在中序序列中查找根结点 然后 左右子女信息入队列  if (in[i]==level[ ]) break;  if (i== )  //根结点无左子树 遍历序列的 n 是右子树  p >lchild=null;  s lvl=++R; s l=i+ ; s h=n ; s f=p; s lr= ;  enqueue(Q s);    else if (i==n ) //根结点无右子树 遍历序列的 n 是左子树  p >rchild=null;  s lvl=++R; s l= ; s h=i ; s f=p; s lr= ; enqueue(Q s);    else   //根结点有左子树和右子树  s lvl=++R; s l= ; s h=i ; s f=p; s lr= ;enqueue(Q s);//左子树有关信息入队列  s lvl=++R; s l=i+ ;s h=n ;s f=p; s lr= ;enqueue(Q s);//右子树有关信息入队列    while (!empty(Q))  //当队列不空 进行循环 构造二叉树的左右子树   s=delqueue(Q); father=s f;  for (i=s l; i<=s h; i++)  if (in[i]==level[s lvl]) break;  p=(bitreptr)malloc(sizeof(binode));                    //申请结点空间  p >data=level[s lvl]; p >lchild=null; p >rchild=null;   //填写该结点数据  if (s lr== ) father >lchild=p;  else father >rchild=p //让双亲的子女指针指向该结点  if (i==s l)  p >lchild=null;        //处理无左子女  s lvl=++R; s l=i+ ; s f=p; s lr= ;  enqueue(Q s);    else if (i==s h)  p >rchild=null;     //处理无右子女  s lvl=++R; s h=i ; s f=p; s lr= ; enqueue(Q s);    elses lvl=++R; s h=i ; s f=p; s lr= ; enqueue(Q s);//左子树有关信息入队列  s lvl=++R; s l=i+ ; s f=p; s lr= ; enqueue(Q s); //右子树有关信息入队列    //结束while (!empty(Q))  return(p);  //算法结束

cha138/Article/program/sjjg/201311/23693

相关参考

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[23]

  PROCprint(bt:BiTreexy:integer)  //将二叉树逆时针旋转度打印xy是根结点基准坐标调用时xy=  IFbt<>NILTHEN[print(bt↑rchil

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[19]

  intLevel(BiTreebt)//层次遍历二叉树并统计度为的结点的个数  intnum=;//num统计度为的结点的个数  if(bt)QueueInit(Q);QueueIn(Qbt)//

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[47]

  .BiThrTreeInSucc(BiThrTreeTp) //在对称序穿线树T中查找给定结点p的中序后继  if(p>rtag==)q=p>rchild; &nb

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[33]

  intBTLC(BiTreeTint*c)//对二叉树T的结点计数  if(T)  *c++;  BTLC(T>lchild&c);//统计左子树结点  BTLC(T>rchi

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[45]

  voidInOrderThreat(BiThrTreethrt)  //thrt是指向中序全线索化头结点的指针本算法中序遍历该二叉树  p=thrt>lchild; //p指向二叉

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[34]

  .intCount(BiTree bt)//非递归遍历求二叉树上的叶子结点个数  intnum=;  BiTrees[];//s是栈栈中元素是二叉树结点指针栈容量足够大  whlie(b

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[25]

  [题目分析]知二叉树中序序列与后序序列第题以递归算法建立了二叉树本题是非递归算法  voidInPostCreat(ElemTypeIN[]POST[]intlhlh)  //由二叉树的中序序列I

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[15]

  [题目分析]先序遍历二叉树的非递归算法要求进栈元素少意味着空指针不进栈  voidPreOrder(Bitree bt)//对二叉数bt进行非递归遍历  inttop=;Bitrees[

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[6]

  .BiTreeCreat(ElemTypeA[]inti)  //n个结点的完全二叉树存于一维数组A中本算法据此建立以二叉链表表示的完全二叉树  BiTreetree;  if(i<=n)t

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[4]

  .[题目分析]当森林(树)以孩子兄弟表示法存储时若结点没有孩子(fch=null)则它必是叶子总的叶子结点个数是孩子子树(fch)上的叶子数和兄弟(nsib)子树上叶结点个数之和  typedef