树节点的遍历,查找,删除(前序,中序,后序)
生活随笔
收集整理的這篇文章主要介紹了
树节点的遍历,查找,删除(前序,中序,后序)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
二叉樹模板類:
class BinaryTree {private Node root;public void setRoot(Node root) {this.root = root;}//刪除結點public void delNode(int no) {}//前序遍歷public void preOrder() {}//中序遍歷public void infixOrder() {}//后序遍歷public void postOrder() {}//前序遍歷public HeroNode preOrderSearch(int no) {}//中序遍歷public HeroNode infixOrderSearch(int no) {}//后序遍歷public HeroNode postOrderSearch(int no) {} }樹節點模板類:
class HeroNode {private int no;private String name;private HeroNode left; //默認nullprivate HeroNode right; //默認null1.遍歷
樹的遍歷分為: 廣度優先遍歷:一層一層從左到右進行遍歷(借助隊列) 深度優先遍歷:①先序遍歷、每個結點的遍歷都滿足根結點、左結點、右結點(均借助棧)②中序遍歷、每個結點的遍歷都滿足左結點、根結點、右結點③后序遍歷、每個結點的遍歷都滿足左結點、右結點、根結點- 前序遍歷:先輸出父節點,再遍歷左子樹和右子樹
- 中序遍歷:先遍歷左子樹,再輸出父節點,再遍歷右子樹
- 后序遍歷:先輸出左子樹,再遍歷右子樹 ,最后輸出父節點
2.查找
- 前序查找
- 中序查找
- 后序查找
3. 刪除節點(基于無序的二叉樹)
//遞歸刪除結點//1.如果刪除的節點是葉子節點,則刪除該節點//2.如果刪除的節點是非葉子節點,則刪除該子樹public void delNode(int no) {//思路/** 1. 因為我們的二叉樹是單向的,所以我們是判斷當前結點的子結點是否需要刪除結點,而不能去判斷當前這個結點是不是需要刪除結點.2. 如果當前結點的左子結點不為空,并且左子結點 就是要刪除結點,就將this.left = null; 并且就返回(結束遞歸刪除)3. 如果當前結點的右子結點不為空,并且右子結點 就是要刪除結點,就將this.right= null ;并且就返回(結束遞歸刪除)4. 如果第2和第3步沒有刪除結點,那么我們就需要向左子樹進行遞歸刪除5. 如果第4步也沒有刪除結點,則應當向右子樹進行遞歸刪除.*///2. 如果當前結點的左子結點不為空,并且左子結點 就是要刪除結點,就將this.left = null; 并且就返回(結束遞歸刪除)if(this.left != null && this.left.no == no) {this.left = null;return;}//3.如果當前結點的右子結點不為空,并且右子結點 就是要刪除結點,就將this.right= null ;并且就返回(結束遞歸刪除)if(this.right != null && this.right.no == no) {this.right = null;return;}//4.我們就需要向左子樹進行遞歸刪除if(this.left != null) {this.left.delNode(no);}//5.則應當向右子樹進行遞歸刪除if(this.right != null) {this.right.delNode(no);}}總結
以上是生活随笔為你收集整理的树节点的遍历,查找,删除(前序,中序,后序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HashMap(Java)
- 下一篇: 互联网晚报 | 11月26日 星期五 |