【问题标题】:Recursive copy of a binary tree二叉树的递归拷贝
【发布时间】:2014-07-11 09:03:59
【问题描述】:

我不明白为什么这个方法复制二叉树,它可以工作但看起来很奇怪,因为它没有使用任何方法插入节点,谢谢。

public BinaryTree<E> copy(BinaryTree<E> T, Position<E> v)
    {
        BinaryTree<E> S = new LinkedBinaryTree<E>();
        if (T.hasRight(v)) 
           copy(T, T.right(v));         // recurse on left child
        if (T.hasLeft(v))
          copy(T, T.left(v));   // recurse on right child
        return S;
    }

    public static void main(String[] args) {
        LinkedBinaryTree<String> T = new LinkedBinaryTree<String>();
        Position<String> r = T.addRoot("r");
        Position<String> a = T.insertLeft(r, "a");
        Position<String> b = T.insertRight(r, "b");
        Position<String> c = T.insertLeft(a, "c");
        Position<String> e = T.insertRight(b,"e");
        Position<String> f = T.insertLeft(b,"f");
        Position<String> g = T.insertRight(a,"g");
        Position<String> h = T.insertLeft(g,"h");
        Position<String> i = T.insertRight(g,"i");

                BinaryTree<String> A = T.copy(T, r);
        A.treeprint(A, r);
        System.out.println("...................");
        System.out.println("isempty: "+A.isEmpty()); //true
        System.out.println(A.left(r).element()); //a
        System.out.println(A.right(r).element()); //b
}

【问题讨论】:

  • 那个方法不行,也行不通。
  • 它有效,这很奇怪。
  • 该方法创建并返回一个空的 LinkedBinaryTree,它从不使用 S。请提供一个小测试表明它“工作”。

标签: java tree binary-tree


【解决方案1】:

那个方法不行。

您的测试构造一棵树“T”,使用您的复制方法(这会创建一棵空树“A”)。

然后你证明 A 是空的:正确,它没有节点。

A.left(r).element() 显示 a 的原因是因为您将 left() 传递给树 T 的根。

我相信当您调用 A.left(r) 时,您的代码中没有任何内容可以检查 r 是否在 A 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 2014-03-29
    • 2010-12-07
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多