课后题 数据结构 ds.05.03.01 解答题
第 75 题

设计一个算法判断两棵二叉树是否相似。相似只比较结构,不比较结点值。

[tag_link]

参考答案

两棵空树相似;恰有一棵为空则不相似;两棵都非空时,分别递归比较左子树和右子树的结构。结点值不参与判断。

伪代码

Similar(A, B):
    if A == null and B == null: return true
    if A == null or B == null:  return false   // 一个为空、另一个非空
    return Similar(A.left, B.left) and Similar(A.right, B.right)

复杂度

最坏时间 O(min(m,n)),其中 m、n 是两树结点数;两树规模相同且结构相似时为 O(n)。递归栈空间 O(min(h1,h2))。

边界条件

两树都空返回 true;只有一棵为空返回 false;两个单根树相似,即使保存的值不同。

易错点

相似不允许把左、右子树交叉匹配,也不是比较结点值;两个递归结果必须同时为真。

评分要点

写全两个空值出口;左右对应递归;不比较 INFO;给出复杂度。