1

另一个简单的,但我似乎无法得到它。我需要编写一个方法来比较两棵二叉树的结构并返回它们是否相同的天气。数据和数据类型不仅仅是结构重要。这里有些例子:

例子!

这是我到目前为止的代码。我认为它真的很接近。

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;

}
4

2 回答 2

2

您粘贴的内容大部分是正确的,只是遗漏了一个关键部分:您应该返回它们的值,而不是只检查左右子树,and这意味着植根于当前节点的树是否满足相同结构的条件。

于 2013-04-18T01:51:49.260 回答
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);

}
于 2013-04-18T03:45:20.940 回答