平衡二叉樹AVL
AVL:(1)空樹是平衡二叉樹
(2)所有子樹的左右子樹的高度差不超過1
(1):判斷是否為平衡二叉樹:
public class CheckBalance {
public boolean check(TreeNode root) {
// write code here
if(root==null ) return true;
if(Math.abs(getDepth(root.left)-getDepth(root.right))>1) return false;
else return check(root.left)&&check(root.right);
}
public int getDepth(TreeNode root){//獲得樹的深度
if(root==null) return 0;
int left=getDepth(root.left);
int right=getDepth(root.right);
return Math.max(left,right)+1;
}
}
(2)搜尋二叉樹的中序遍歷,就是從小到大的。(紅黑樹、平衡搜尋二叉樹都是讓二叉樹的調整代價較小)。判斷一個二叉樹是否為搜尋二叉樹,非遞迴的中序遍歷,當前值小於上一個節點值
(3)判斷一棵樹是否為完全二叉樹(除最後一層都是滿的,最後一層有右孩子一定有左孩子)。
按層遍歷,當前節點有右孩子卻沒左孩子---FALSE。當前節點不是左右孩子都有---後面節點必須是葉子
public class CheckCompletion {
public boolean chk(TreeNode root) {
// write code here
if(root==null) return false;
Queue<TreeNode> que=new LinkedList();
boolean leaf=true;//false表示葉子節點
que.add(root);
while(!que.isEmpty()){
TreeNode p=que.poll();
if(p.left==null&&p.right!=null) return false;//有右孩子沒左孩子,返回FALSE
if(!leaf&&(p.left!=null||p.right!=null)) return false;//左右孩子不全有,必須是葉子節點
if(p.left!=null){//將左右節點新增
que.add(p.left);
}else{
leaf=false;//沒有左孩子,證明其實葉子
}
if(p.right!=null){
que.add(p.right);
}else{
leaf=false;//沒有右孩子,證明其是葉子節點。
}
}
return true;
}
}
(4)找節點的後繼節點:
方法一:中序遍歷,node後面的就是他的後繼 時間空間都是O(n)
方案二:時間O(k),k小於高度。空間原地
如果節點node有右子樹:他的後繼節點=右子樹最左邊的節點。
如果node沒有右子樹,node是左孩子:node後繼節點=node父親。
如果node沒有右子樹,node是右孩子:向上找最近的父節點p1和祖父節點p2,滿足p1是p2的左孩子,則ps是node的後繼節點。
相關文章
- 平衡二叉樹(AVL)二叉樹
- 手擼二叉樹——AVL平衡二叉樹二叉樹
- 十三、Mysql之平衡二叉樹(AVL樹)MySql二叉樹
- 平衡二叉樹(AVL樹),原來如此!!!二叉樹
- 手寫AVL平衡二叉搜尋樹
- 自動平衡二叉樹的構建-AVL樹二叉樹
- 平衡二叉樹(AVL樹)和 二叉排序樹轉化為平衡二叉樹 及C語言實現二叉樹排序C語言
- Java 樹結構實際應用 四(平衡二叉樹/AVL樹)Java二叉樹
- 演算法與資料結構——AVL樹(平衡二叉搜尋樹)演算法資料結構
- Java集合原始碼分析之基礎(五):平衡二叉樹(AVL Tree)Java原始碼二叉樹
- 詳解什麼是平衡二叉樹(AVL)(修訂補充版)二叉樹
- 資料結構與演算法-二叉查詢樹平衡(AVL)資料結構演算法
- 資料結構高階--AVL(平衡二叉樹)(圖解+實現)資料結構二叉樹圖解
- 看動畫學演算法之:平衡二叉搜尋樹AVL Tree動畫演算法
- 平衡二叉樹二叉樹
- 排序二叉樹和平衡二叉樹排序二叉樹
- 平衡二叉樹,B樹,B+樹二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 5分鐘瞭解二叉樹之AVL樹二叉樹
- 110. 平衡二叉樹二叉樹
- 漫話:什麼是平衡(AVL)樹?這應該是把AVL樹講的最好的文章了
- 平衡樹和二叉樹的區別二叉樹
- 平衡二叉查詢樹:紅黑樹
- 二叉堆、BST 與平衡樹
- JZ-039-平衡二叉樹二叉樹
- LeetCode-110-平衡二叉樹LeetCode二叉樹
- Java實現紅黑樹(平衡二叉樹)Java二叉樹
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 程式碼隨想錄——二叉樹-12.平衡二叉樹二叉樹
- 資料結構-平衡二叉樹資料結構二叉樹
- 每日一練(28):平衡二叉樹二叉樹
- python實現非平衡二叉樹Python二叉樹
- 二叉平衡樹 python 列表 遞迴Python遞迴
- 資料結構和演算法-二叉樹,AVL,紅黑樹資料結構演算法二叉樹
- [Python手撕]判斷平衡二叉樹Python二叉樹
- 學習筆記——二叉平衡樹(BST)筆記
- 遞迴判斷是否二叉平衡樹遞迴
- 夜刷:平衡二叉樹的基本操作二叉樹
- 二叉樹的深度、寬度遍歷及平衡樹二叉樹