给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过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; }; |