二叉树的递归副本

时间:2014-07-11 09:03:59

标签: java tree binary-tree

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

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
}

1 个答案:

答案 0 :(得分:1)

该方法不起作用。

您的测试构建树'T',使用您的复制方法(创建一个空树'A')。

然后显示A为空:正确,没有节点。

A.left(r).element()显示a的原因是因为你传递了左()树T的根。

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