0
我有打電話,我在main方法編碼(樹,樹節點) 一類的多個實例的問題,系統會給儘管兩棵樹顯然是輸出cdjcdj不同的樹木。 如果我是分離兩個後序()調用(每個樹已被推到堆棧之後調用)問題調用類的多個實例中的Java
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Ĵ。
這是否意味着我的班級沒有被複制,而是在我製作新的樹時被重用?
下面是代碼:
進口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; } }
的樹類代碼
進口的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; } }
哦哇,解決了它,謝謝! – Esmond 2010-03-02 14:26:00