【发布时间】:2014-06-23 14:30:46
【问题描述】:
我最近在面试中被问到
如果两个给定的二叉树在结构上相同但内容不同,那么查找两个给定二叉树的有效算法是什么?
a
/ \
b c
\
e
z
/ \
u v
\
t
结构相同。
下一个问题是找出两个二叉树是否在结构上是镜像的?
感谢任何指针或帮助。
我的尝试是
boolean isStrucutrallyIdentitical(BinaryNode root1, BinayNode root2) {
if(root1==null && root2==null) return true;
if(root1==null || root2==null) return false;
if(root1!=null && roo2!=null) return true; // instead of value just check if its null or not
return isStrucutrallyIdentitical(root1.getLeft(), root2.getLeft()) && isStrucutrallyIdentitical(root1.getRight(), root2.getRight());
}
【问题讨论】:
-
你的尝试在哪里?
-
嗨,米奇,我已经尝试更新了这个问题。
-
我不知道有什么特别的 best 方式,但我可能会选择一个遍历顺序(前序、后序或中序)来使用将树转换为表示每个节点有多少个子节点的字符串(例如,在您的示例中为 0211 并按顺序遍历),然后比较字符串。相同的结构将产生相同的字符串。镜像情况有点难,但我怀疑如果你使用中序遍历,在镜像情况下可能会出现一个反转的字符串。
-
@plzdontkillme 实际上你非常接近。首先,您的第二个和第三个
ifs 是相同的(请参阅en.wikipedia.org/wiki/De_Morgan%27s_laws)。剩下的 - 试着拿一张纸和笔画一些树,然后尝试手动“执行”你的代码。 -
@twalberg 这太复杂了。
标签: data-structures binary-tree jaas