天天看點

[劍指offer] 平衡二叉樹

本文首發于我的個人部落格: 尾尾部落

題目描述

輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。

解題思路

定義:平衡二叉查找樹,簡稱平衡二叉樹。

  1. 可以是空樹。
  2. 假如不是空樹,任何一個結點的左子樹與右子樹都是平衡二叉樹,并且高度之差的絕對值不超過1。

周遊每個結點,借助一個擷取樹深度的遞歸函數,根據該結點的左右子樹高度差判斷是否平衡,然後遞歸地對左右子樹進行判斷。

參考代碼

public class Solution {
    public boolean IsBalanced_Solution(TreeNode root) {
        if(root == null)
            return true;
        return Math.abs(maxDept(root.left) - maxDept(root.right)) <=1 &&
            IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
    }
    public int maxDept(TreeNode root){
        if(root == null)
            return 0;
        return 1 + Math.max(maxDept(root.left), maxDept(root.right));
    }
}
           

繼續閱讀