在瞭解了查找和排序後,咱們又從新將目光放回數據結構上,本章咱們將學習一種非線性數據結構——樹。html
public void preorder(ArrayIterator<T> iter){ iter.add(element); if(left != null) left.preorder(iter); if(right != null) right.preorder(iter); }
public void inorder(ArrayIterator<T> iter){ if(left != null) left.inorder(iter); iter.add(element); if(right != null) right.inorder(iter); }
public void postorder(ArrayIterator<T> iter){ if(left != null) left.postorder(iter); if(right != null) right.postorder(iter); iter.add(element); }
public void levelorder(TreeNode root) { ArrayDeque<TreeNode> deque=new ArrayDeque<TreeNode>(); deque.add(root);//根節點入隊 while(!deque.isEmpty()){ TreeNode temp=deque.remove(); System.out.print(temp.val+"--"); if(temp.left!=null){ deque.add(temp.left); } if(temp.right!=null){ deque.add(temp.right); } } }
TreeNode類
,每一結點都將包含一個指針,它指向將要存儲在該結點的元素,以及該結點全部可能孩子的指針。is-a關係
是什麼關係?is-a
(英語:subsumption,包含架構)指的是類的父子繼承關係,例如類D是另外一個類B的子類(類B是類D的父類)。換句話說,一般"D is-a B"(B把D包含在內,或是D被包含在B內)指的是,概念體D物是概念體B物的特殊化,而概念體B物是概念體D物的通常化。舉例來講,水果是蘋果、橘子、芒果與其餘水果的通常化。toString
都沒法消除錯誤。後來發現是因爲LinkedBinaryTree
中的getLeft()
和getRight()
方法出現了問題,由於按照書上代碼所寫的它本來一直返回的是本來設置的right
和left
而不是實際應該返回的根結點的左孩子或右孩子。public BinaryTreeNode<T> getLeft() { return left; } public BinaryTreeNode<T> getRight() { return right; }
getLeft()
和getRight()
做出修改便可實現。isLeaf
的方法中輸入所要判斷的結點做爲參數,可是後來發現這樣引用的時候會特別醜。System.out.println(node1.isLeaf(node1));
public boolean isLeaf(){ if (left == null && right == null){ return true; } else { return false; } }
left
和right
都是開始時設定的結點其內容都爲空,想要引用實際想要判斷的結點的話要加上this
。public boolean isLeaf(){ if (this.left == null && this.right == null){ return true; } else { return false; } }
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 10/10 | 1/1 | 10/10 | |
第二週 | 246/366 | 2/3 | 20/30 | |
第三週 | 567/903 | 1/4 | 10/40 | |
第四周 | 2346/3294 | 2/6 | 20/60 | |
第五週 | 2346/3294 | 2/8 | 30/90 | |
第六週 | 1343/4637 | 2/10 | 20/110 |