Leetcode:110.平衡二叉樹
阿新 • • 發佈:2018-11-13
給定一個二叉樹,判斷它是否是高度平衡的二叉樹。
本題中,一棵高度平衡二叉樹定義為:
一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過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
解題思路:
遞迴計算左右子樹高度,沒計算一個節點都要判斷當前節點是否是平衡二叉樹,如果一旦發現不是,那麼整個樹就不是平衡二叉樹。
class Solution { public: bool isBalanced(TreeNode* root) { if (root == NULL) return true; //將樹中的val改成高度 hight(root); return sgn; } int hight(TreeNode* root) { if (sgn == false) return 0;//已發現異常結點 if (root == NULL) return 0; if (hasNoChild(root)) { root->val = 1; return 1; } int left, right; left = hight(root->left); right = hight(root->right); if (abs(left - right) > 1) sgn = false;//異常條件 root->val = (left > right ? left : right) + 1; return root->val; } private: bool sgn = true; }; |