实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 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 。
code:
变向求二叉树高度的问题。
用每个结点的高度信息反馈以该结点为根节点的树是否平衡,若高度为-1则代表不平衡;否则返回以该结点为根节点的树的高度,供其父节点判断。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { private: int isBalancedCore(TreeNode* root) { if(root==nullptr) return 0; else if(root->left==nullptr&&root->right==nullptr) return 1; int leftHeight=isBalancedCore(root->left); int rightHeight=isBalancedCore(root->right); if(leftHeight==-1||rightHeight==-1) return -1; if(abs(leftHeight-rightHeight)>1) return -1; return max(leftHeight,rightHeight)+1; } public: bool isBalanced(TreeNode* root) { return isBalancedCore(root)!=-1; } };