2013-04-18 60 views
1

另一个容易,但我似乎无法得到它。我需要编写一种方法来比较两棵二叉树的结构,并返回它们相同或不相同的天气。数据和数据类型只对结构不重要。下面是一些例子:比较两个二叉树,看他们是否有相同的结构

Examples!

这里是我到目前为止的代码。我认为它非常接近。

public boolean sameStructure(OrderedSet<E> other) { 
    if (other.size() != size) 
     return false; 
    return sameStructureHelp(other, root, other.root); 
} 

private boolean sameStructureHelp(OrderedSet<E> other, TreeNode ref, 
     TreeNode otherRef) { 
    if (otherRef == null && ref != null) 
     return false; 
    if (otherRef != null && ref == null) 
     return false; 
    sameStructureHelp(other, ref.left, otherRef.left); 
    sameStructureHelp(other, ref.right, otherRef.right); 
    return true; 

} 

回答

2

你贴什么是基本上是正确的,唯一缺少的一个关键部分:不是只是检查左,右子树,你应该返回自己的and值,如果根植于当前节点的树木满足这意味着条件是相同的结构。

+0

你是什么说法?仔细一看,看起来如果两个节点同时为空,你的代码会抛出一个NullPointerException,不是吗? –

0

感谢@Ziyao卫 这里是一个解决该问题的代码:

public boolean sameStructure(OrderedSet<E> other) { 
    if (other.size() != size) 
     return false; 
    return sameStructureHelp(other, root, other.root); 
} 

private boolean sameStructureHelp(OrderedSet<E> other, TreeNode ref, 
     TreeNode otherRef) { 
    if (otherRef == null && ref != null) 
     return false; 
    if (otherRef != null && ref == null) 
     return false; 
    if (otherRef == null && ref == null) 
     return true; 

    return sameStructureHelp(other, ref.left, otherRef.left) 
     && sameStructureHelp(other, ref.right, otherRef.right); 

} 
相关问题