平衡二叉樹學習

平衡二叉樹學習

一、概述

我不會說的很詳細,因爲我看到了兩篇很好的博客,已經說的很好了,如果要複習,就直接看他的博客,我只做提煉,幫助以後複習。

二、解釋本質

  • 平衡二叉樹首先是一個二叉查找樹。
  • 二叉查找樹是什麼呢?二叉查找樹就是根節點一定大於左子樹的所有值,一定小於右子樹的所有值,並且每個子樹都滿足該規律。
  • 平衡二叉樹爲了解決什麼了,爲了解決如果出現鏈狀二叉樹,確定某個節點需要找O(n)次,這樣違背了查找二叉樹的初衷。如下圖,就是極端情況,右子樹是一個鏈:如果要找4,那麼就要走四次。
    在這裏插入圖片描述

​ 如果我們把它變成平衡二叉樹呢:那麼就是如下圖:(紅色是平衡因子),這樣優化後我們找4,就只要找2次
在這裏插入圖片描述

  • 平衡二叉樹的平衡因子,就是根節點的左子樹深度減去右子樹深度,只能是-1,0,1 ;也就是如果左深度減去右深度的絕對值大於1,那就不平衡了

三、瞭解幾種旋轉

二叉樹的幾種旋轉
一個例子加深印象

四、劍指offer第39題

判斷一個二叉樹是否是平衡二叉樹。
我的代碼:

public class Code039 {
	boolean flag = true;
	public boolean IsBalanced_Solution(TreeNode root) {
	   int count = 0;
        count = judgeIsBalance(root,count);
        return flag;
    }

	public int judgeIsBalance(TreeNode root, int count) {
		if(root == null) {
			return count;
		}
         count++int left = judgeIsBalance(root.left,count);
		int right = judgeIsBalance(root.right, count);
		if(Math.abs(left-right)>1) {
			flag = false;
		}
		return Math.max(left, right); // 用來返回根節點下面 左子樹 和 右子樹中 哪個深度最大的
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章