找到两个二叉树在结构上是相同的

时间:2014-06-23 14:30:47

标签: data-structures binary-tree jaas

我最近在采访中被问到

如果两个给定的二叉树在结构上相同而不是内容,那么找到有效的算法是什么?

  a 
/   \
b    c
      \ 
       e

  z 
/   \
u    v
      \ 
       t

在结构上是相同的。

下一个问题是找出2个二叉树是否在结构上是镜像的?

赞赏任何指针或帮助。

我的尝试是

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()); 
} 

2 个答案:

答案 0 :(得分:3)

public boolean areStructuralySame(TreeNode<Integer> tree1, TreeNode<Integer> tree2) {
    if(tree1 == null && tree2 == null) {
        return true;
    }
    if(tree1 == null || tree2 == null) {
        return false;
    } else return (areStructuralySame(tree1.getLeft(), tree2.getLeft()) && areStructuralySame(tree1.getRight(), tree2.getRight()));

}

这很好用

答案 1 :(得分:0)

private static boolean compare(TNode curRoot, TNode newRoot) {
    if (curRoot == null && newRoot == null) {
        return true;
    } else if ((curRoot == null && newRoot != null) || (curRoot != null && newRoot == null))
        return false;
    else {
        if (compare(curRoot.left, newRoot.left) && compare(curRoot.right, newRoot.right))
            return true;
        return false;
    }
}