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

Posted 结点

篇首语:缥帙各舒散,前后互相逾。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第六章 答案 (五)[12]相关的知识,希望对你有一定的参考价值。

   [题目分析]后序遍历最后访问根结点 即在递归算法中 根是压在栈底的 采用后序非递归算法 栈中存放二叉树结点的指针 当访问到某结点时 栈中所有元素均为该结点的祖先 本题要找p和q 的最近共同祖先结点r 不失一般性 设p在q的左边 后序遍历必然先遍历到结点p 栈中元素均为p的祖先 将栈拷入另一辅助栈中 再继续遍历到结点q时 将栈中元素从栈顶开始逐个到辅助栈中去匹配 第一个匹配(即相等)的元素就是结点p 和q的最近公共祖先

  typedef struct  BiTree t;int tag;//tag=   表示结点的左子女已被访问 tag= 表示结点的右子女已被访问  stack;  stack s[] s [];//栈 容量够大  BiTree Ancestor(BiTree ROOT p q r)//求二叉树上结点p和q的最近的共同祖先结点r   top= ; bt=ROOT;  while(bt!=null ||top> )  while(bt!=null && bt!=p && bt!=q)              //结点入栈  s[++top] t=bt; s[top] tag= ; bt=bt >lchild; //沿左分枝向下  if(bt==p)  //不失一般性 假定p在q的左侧 遇结点p时 栈中元素均为p的祖先结点  for(i= ;i<=top;i++) s [i]=s[i]; top =top; //将栈s的元素转入辅助栈s 保存  if(bt==q)  //找到q 结点   for(i=top;i> ;i )// 将栈中元素的树结点到s 去匹配  pp=s[i] t;  for (j=top ;j> ;j )  if(s [j] t==pp) printf( p 和q的最近共同的祖先已找到 ) return (pp);  }  while(top!= && s[top] tag== ) top ;      //退栈  if (top!= ){s[top] tag= ;bt=s[top] t >rchild;} //沿右分枝向下遍历  //结束while(bt!=null ||top> )  return(null);//q p无公共祖先  }//结束Ancestor

cha138/Article/program/sjjg/201311/23728

相关参考

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[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