【发布时间】:2011-01-22 18:01:18
【问题描述】:
我在调用我已编码的类的多个实例时遇到问题(树、树节点) 在 main 方法中,即使两棵树显然是不同的树,系统也会给出输出 c d j c d j。 如果我要分开两个 postOrder() 调用(每个调用在树被推入堆栈后调用)
Stack<Tree> alphaStack = new Stack<Tree>(); TreeNode a = new TreeNode('i'); Tree tree = new Tree(a); TreeNode newleft = new TreeNode('a'); TreeNode newright = new TreeNode('b'); tree.setLeft(a, newleft); tree.setRight(a, newright); alphaStack.push(tree); Tree.postOrder(alphaStack.pop().getRoot()); TreeNode b = new TreeNode('j'); Tree newtree = new Tree(b); TreeNode left = new TreeNode('c'); TreeNode right = new TreeNode('d'); newtree.setLeft(b, left); newtree.setRight(b, right); alphaStack.push(newtree); Tree.postOrder(alphaStack.pop().getRoot());
输出将是 a b i c d j。
这是否意味着我的课程没有被复制,而是在我制作新树时被重复使用?
下面是代码:
导入 java.util.Stack;
公共类 mast_score {
public static void main(String[] args){ Stack<Tree> alphaStack = new Stack<Tree>(); TreeNode a = new TreeNode('i'); Tree tree = new Tree(a); TreeNode newleft = new TreeNode('a'); TreeNode newright = new TreeNode('b'); tree.setLeft(a, newleft); tree.setRight(a, newright); alphaStack.push(tree); TreeNode b = new TreeNode('j'); Tree newtree = new Tree(b); TreeNode left = new TreeNode('c'); TreeNode right = new TreeNode('d'); newtree.setLeft(b, left); newtree.setRight(b, right); alphaStack.push(newtree); Tree.postOrder(alphaStack.pop().getRoot()); Tree.postOrder(alphaStack.pop().getRoot());} }
树节点代码
公共类树节点{ 对象项;
TreeNode parent; TreeNode left; TreeNode right; public TreeNode (Object item) { this.item = item; parent = null; left = null; right = null; } public TreeNode getParent(TreeNode current) throws ItemNotFoundException { if(current == null) throw new ItemNotFoundException("No parent"); if(current.parent == null) throw new ItemNotFoundException("This is the root"); else return current.parent; } public TreeNode getLeft(TreeNode current) throws ItemNotFoundException { if(current == null) throw new ItemNotFoundException("No left or right child"); if(current.left == null) throw new ItemNotFoundException("No left child"); else return current.left; } public TreeNode getRight(TreeNode current) throws ItemNotFoundException { if(current == null) throw new ItemNotFoundException("No left or right child"); if(current.right == null) throw new ItemNotFoundException("No right child"); else return current.right; } public Object getElement() throws ItemNotFoundException { if(this.item == null) throw new ItemNotFoundException("No such node"); else return this.item; } }
Tree 类的代码
导入 java.util.*;
公共类树{
static TreeNode root; int size; public Tree() { root = null; } public Tree(TreeNode root) { Tree.root = root; } public TreeNode getRoot() { return this.root; } public int getLvl(TreeNode node) { return node.lvlCount; } public void setLeft(TreeNode node, TreeNode left) { node.left = left; } public void setRight(TreeNode node, TreeNode right) { node.right = right; } public static void postOrder(TreeNode root) { if (root != null) { postOrder(root.left); postOrder(root.right); System.out.print(root.item + " "); } else { return; } } public static int getSize(TreeNode root) { if (root != null) { return 1 + getSize(root.left) + getSize(root.right); } else { return 0; } } public static boolean isEmpty(Tree Tree) { return Tree.root == null; } }
【问题讨论】:
标签: java