我不明白为什么这个方法复制二叉树,它可以工作,但它看起来很奇怪,因为它没有使用任何方法来插入节点,谢谢。
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
}
答案 0 :(得分:1)
该方法不起作用。
您的测试构建树'T',使用您的复制方法(创建一个空树'A')。
然后显示A为空:正确,没有节点。
A.left(r).element()显示a的原因是因为你传递了左()树T的根。
我相信你的代码中没有任何内容可以在你调用A.left(r)时检查r是否在A中。