【3分鐘秒懂算法題解】 LeetCode 110. 平衡二叉樹

110. 平衡二叉樹

原題鏈接
給定一個二叉樹,判斷它是否是高度平衡的二叉樹。

本題中,一棵高度平衡二叉樹定義爲:

一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。

示例 1:

給定二叉樹 [3,9,20,null,null,15,7]

    3
   / \
  9  20
    /  \
   15   7
返回 true 。

示例 2:

給定二叉樹 [1,2,2,3,3,null,null,4,4]

       1
      / \
     2   2
    / \
   3   3
  / \
 4   4
返回 false 。

要點

只需要在某個節點的時候,此時它的左子樹和右子樹高度差超過1那麼就不是一棵平衡二叉樹。
所以只要分別求出左右子樹的高度再判斷是不是高度差超過1。

解法

  1. 求出左子樹高度 lH
  2. 求出右子樹高度 rH
  3. abs(lHrH)>1abs(lH-rH)>1 則不平衡。

代碼片段

public class Solution {
	boolean balances = true; //1. 默認當前是一棵平衡二叉樹
	
	public boolean isBalanced(TreeNode root) {
		helper(root);
		return balances; //2. 返回結果
	}

	public int helper(TreeNode root) {
		if (root == null) {//3. 遞歸終止條件,節點爲null則沒有高度
			return 0;
		}

		int leftH = helper(root.left) + 1;//4.當前左節點的高度爲左子樹高度+1
		int rightH = helper(root.right) + 1;//5.當前右節點的高度爲右子樹高度+1
		if (Math.abs(leftH - rightH) > 1) {//6.如果高度差超過1,修改成非平衡二叉樹直接返回。
			balances = false;
			return 0;
		}
		return Math.max(leftH, rightH);//7.計算當前高度
	}
}


結尾

1.博客地址
2.源代碼倉庫

如果你在代碼裏看到了用 數字標記的註釋 如 //1.xxx 這是我寫代碼的順序,希望能給你一點啓發。


😁😁😁製作動畫過程不易,請大家順手點贊收藏咯 謝謝~😁😁😁
有其它題目不理解的也可以一起學習,如有錯誤歡迎指出~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章