二叉树算法的设计技巧

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二叉树算法的设计技巧

2007-07-18

遍历二叉树是二叉树各种操作的基础,遍历算法中对每个结点的访问操作可以是多种形式及多个操作,根据遍历算法的框架,适当修改访问操作的内容,可以派生出很多关于二叉树的应用算法,如求结点的双亲、结点的孩子、判定结点所在的层次等,也可以在遍历的过程中生成结点,建立二叉树的存储结构。

算法 5-1 复制一棵二叉树。

分析:复制二叉树是在计算机中已经存在一棵二叉树,要求按原二叉树的结构重新生成一棵二叉树,其实质就是按照原二叉树的二叉链表另建立一个新的二叉链表。复制是在遍历过程中,将“访问”操作定义为“生成二叉树的一个结点”。

下面以后序遍历为例写出算法。

算法 5-2 判断两棵二叉树是否相似。所谓两棵二叉树相似,是指要么它们都为空或都只有一个根结点,要么它们的左右子树均相似。

分析:依题意,得到如下判定两棵二叉树s和t是否相似的递归函数Like:

⑴ 若s=t=NULL,则s和t相似,即Like(s, t)=1;

⑵ 若s和t中有一个为NULL,另一个不为NULL,则s和t不相似,即Like(s, t)=0;

⑶ 进一步判断s的左子树和t的左子树、s的右子树和t的右子树是否相似。

具体算法如下:

算法 5-3 假设二叉树采用二叉链表存储,p所指结点为任一给定的结点,编写算法求从根结点到p所指结点之间的路径。

分析:本题采用非递归后序遍历二叉树,当后序遍历访问到p所指结点时,此时栈中所有结点均为p所指结点的祖先,由这些祖先便构成了一条从根结点到p所指结点之间的路径。算法如下:

相关文档
最新文档