扫码加入训练营

牢记核心词

学习得礼盒

计算机考研:数据结构常用算法精析(6)

2013-12-11 14:35:35来源:新东方在线编辑

  例题:一棵完全二叉树上有1001个结点,其中叶子结点的个数是( )【西安交通大学 1996 三、2 (3分)】

  A. 250 B. 500 C.254 D.505 E.以上答案都不对 501

  例题1:由二叉树结点的公式:n=n0+n1+n2=n0+n1+(n0-1)=2n0+n1-1, 因为n=1001,所以1002=2n0+n1,在完全二叉树树中,n1只能取0或1,在本题中只能取0,故n=501,因此选E。

  例题2:高度为K的完全二叉树至少有_ __个叶子结点。(刚好第K上只有一个叶子时,高度为K,N= -1+1= 例题3:在顺序存储的二叉树中,编号为i和j的两个结点处在同一层的条件是

  用顺序存储二叉树时,要按完全二叉树的形式存储,非完全二叉树存储时,要加“虚结点”。设编号为i和j的结点在顺序存储中的下标为s 和t ,则结点i和j在同一层上的条件是ëlog2sû=ëlog2tû。

  二叉树的存储结构

  1.顺序存储结构

  用一组连续的存储单元(一维数组)存储二叉树中元素,称为二叉树的顺序存储结构。描述如下:

  #define maxsige 1024 //二叉树结点数最大值//

  typedef datatype sqtree [maxsize];

  若说明sqtree bt; 则( bt[o] bt[1] … bt[maxsize-1])为二叉树的存储空间。每个单元bt[i] 可存放类型为datatype的树中元素。

  2.链式存储结构

  二叉结中结点的一般形式为:

  lchild

  data

  rchild

  遍历的递归算法

  void preorder( BTptr T) //对当前根结点指针为T的二叉树按前序遍历//

  {

  if (T) { visit(T); // 访问T所指结点 //

  preorder(T–>Lchild); //前序遍历T之左子树//

  preorder(T–>Rchild); //前序遍历T之右子树//

  }

  }

  void Inorder (BTptr T) //对当前根结点指针为T的二叉树按中序遍历//

  {

  if (T) { Inorder( T->Lchild); //中序遍历T之左子树//

  visit(T); //访问T所指结点//

  Inorder(T->Rchild); //中序遍历T之右子树//

  }

  }

  void postorder ( BTptr T) //对当前根结点指针为T的二叉树按后序遍历//

  {

  if (T) { postorder(T–>Lchild); //后序遍历T之左子树//

  postorder(T–>Rchild); //后序遍历T之右子树//

  visit(T); //访问T所指结点//

  }

  }

  从上述三个算法中看出,若抹去 visit(T)语句,则三个算法是一样的,可以推断,这三个算法的递归路线是一致的(走的线路是一样的,只是对结点的访问时间不同而已,前序是第一次碰到就访问,中序是第一次返回时访问,后序是第二次返回时访问。

考研公开课小程序

本文关键字: 计算机 考研 数据结构

考研英语核心词汇营

背词+听课+练习+督学,学习得礼盒

更多资料
更多>>
更多内容

关注新东方在线考研服务号

获得21考研真题及答案解析

1. 打开手机微信【扫一扫】,识别上方二维码;
2.点击【关注公众号】,获取资料大礼包。

考研资料大礼包
近10年考研真题及答案免费下载
更多>>
更多公开课>>
更多>>
更多资料