【发布时间】: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