Vue腳手架runtime-only中render函式的引數為什麼是h?
阿新 • • 發佈:2020-11-02
二叉樹遍歷的說明
使用前序,中序和後序對二叉樹進行遍歷:
1. 前序遍歷: 先輸出父節點,再遍歷左子樹和右子樹(父左右)
2. 中序遍歷: 先遍歷左子樹,再輸出父節點,再遍歷右子樹(左父右)
3. 後序遍歷: 先遍歷左子樹,再遍歷右子樹,最後輸出父節點(左右父)
小結: 看輸出父節點的順序,就確定是前序,中序還是後序
根據遍歷序列確定二叉樹
由二叉樹的先序序列和中序序列
1. 在先序序列中,第一個結點一定是二叉樹的根結點
2. 在中序序列中,根結點必然將中序序列分割成兩個子序列;前一個子序列是根結點的左子樹的中序序列,後一個是右子樹的
3. 根據這兩個子序列,在先序序列中找到對應的左右子序列
4. 在先序序列中,左子序列的第一個結點是左子樹的根結點,右子序列同理
5. 如此遞迴下去
• 總結:先序配合中序時,中序負責找左右子序列,先序負責找子樹的根節點
由二叉樹的中序序列和後序序列
1. 在後序序列,根結點在序列尾部
2. 在中序序列,根結點必在其中間,左邊是左子樹子孫,右邊同理
3. 根據這兩個子序列,在後序序列找到對應的左右序列
4. 在後序序列中,左子序列的尾結點是左子樹的根結點,右子序列同理
5. 如此遞迴下去
• 總結:後序配合中序時,中序負責找左右子序列,後序負責找子樹的根結點
注意:根據先序序列和後序序列是不能確定一個二叉樹的
綜上所述:
- 配合中序序列時,先序和後序都是確定子樹的根結點,區別是根結點在其子序列的位置(先序是子序列的第一個,後序是子序列的最後一個);
- 而中序序列都是在先或後序序列找到根結點後,找到左右子序列。
二叉樹節點程式碼實現
1. classBoy{ 2. privatecharid; 3. privateStringname; 4. privateBoyleft;//左子節點,預設為 null 5. privateBoyright;//右子節點,預設為 null 6. 7. 8. publicBoy(charid,Stringname){ 9. this.id=id; 10. this.name=name;11. } 12. 13. publicvoidsetId(charid){ 14. this.id=id; 15. } 16. 17. publicintgetId(){ 18. returnid; 19. } 20. 21. 22. publicStringgetName(){ 23. returnname; 24. } 25. 26. publicvoidsetName(Stringname){ 27. this.name=name; 28. } 29. 30. publicBoygetLeft(){ 31. returnleft; 32. } 33. 34. publicvoidsetLeft(Boyleft){ 35. this.left=left; 36. } 37. 38. publicBoygetRight(){ 39. returnright; 40. } 41. 42. publicvoidsetRight(Boyright){ 43. this.right=right; 44. } 45. 46. @Override 47. publicStringtoString(){ 48. return"Boy{"+ 49. "id="+id+ 50. ",name='"+name+'\''+ 51. '}'; 52. } 53. }
前序遍歷程式碼實現
1. classPostOrder{ 2. publicstaticvoidpostOrder(Boyboy){ 3. if(boy==null){ 4. System.out.println("二叉樹為空,無法遍歷"); 5. return; 6. } 7. System.out.println(boy);//先輸出父結點 8. if(boy.getLeft()!=null){//遞歸向左子樹前序遍歷 9. postOrder(boy.getLeft()); 10. } 11. if(boy.getRight()!=null){//遞歸向右子樹中序遍歷 12. postOrder(boy.getRight()); 13. } 14. } 15. 16. }
中序遍歷程式碼實現
1. classInfixOrder{ 2. publicstaticvoidinfixOrder(Boyboy){ 3. if(boy==null){ 4. System.out.println("二叉樹為空,無法遍歷"); 5. return; 6. } 7. if(boy.getLeft()!=null){//遞歸向左子樹中序遍歷 8. infixOrder(boy.getLeft()); 9. } 10. System.out.println(boy);//輸出父結點 11. if(boy.getRight()!=null){//遞歸向右子樹中序遍歷 12. infixOrder(boy.getRight()); 13. } 14. } 15. }
後序遍歷程式碼實現
1. classLastOrder{ 2. publicstaticvoidlastOrder(Boyboy){ 3. if(boy==null){ 4. System.out.println("二叉樹為空,無法遍歷"); 5. return; 6. } 7. if(boy.getLeft()!=null){//遞歸向左子樹中序遍歷 8. lastOrder(boy.getLeft()); 9. } 10. if(boy.getRight()!=null){//遞歸向右子樹中序遍歷 11. lastOrder(boy.getRight()); 12. } 13. System.out.println(boy);//輸出父結點 14. } 15. }