LeetCode110. Balanced Binary Tree(C++實現)

LeetCode110. Balanced Binary Tree(C++實現)

題目鏈接

Balanced Binary Tree

AC代碼

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    bool flag;
    int postOrderTraverse(TreeNode *p) {
        if (!flag) {
            return 0;
        }
        if (!p) {
            return 0;
        }
        if (!p->left && !p->right) {
            return 1;
        }
        int left = postOrderTraverse(p->left);
        int right = postOrderTraverse(p->right);
        if (abs(left - right) > 1) {
            flag = false;
        }
        return 1 + max(left, right);
    }
    bool isBalanced(TreeNode* root) {
        if (!root) {
            return true;
        }
        flag = true;
        postOrderTraverse(root);
        return flag;
    }
};

算法思路

判斷給定二叉樹是否爲平衡二叉樹,根據平衡二叉樹定義,平衡二叉樹任意節點的左右子樹高度差小於1,後序遍歷,遞歸到葉子節點時,返回樹高1,其父親節點判斷左右子樹樹高差距,若大於1,置flag爲false,否則返回左右子樹樹高較高者加1,爲當前子樹樹高

樣例輸入1

[3,9,20,null,null,15,7]

樣例輸出1

true

樣例輸入2

[1,2,2,3,3,null,null,4,4]

樣例輸出2

false

鳴謝

LeetCode

最後

  • 由於博主水平有限,不免有疏漏之處,歡迎讀者隨時批評指正,以免造成不必要的誤解!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章