比较两个二叉树,看它们是否具有相同的结构

时间:2013-04-18 01:49:14

标签: java data-structures binary-tree binary-search-tree

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

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 个答案:

答案 0 :(得分:2)

你粘贴的东西大多是正确的,只是错过了一个关键部分:你应该返回它们的and值,而不是仅仅检查左边和右边的子树,这意味着植根于当前节点的树是否满足条件是相同的结构。

答案 1 :(得分:0)

谢谢@Ziyao Wei 这是解决问题的代码:

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

}