
1.想法
平衡树的要求: 任何一个节点左右子树的高度差不超过1
首先递归地判断根节点左右子树是否平衡,之后分别进入左右子树,再以当前节点为根,重复上述判断。
2.实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x): val(x), left(nullptr), right(nullptr){} }; class Solution { public: bool isBalanced(TreeNode* root) { if (!root) return true; int ldep = depth(root->left); int rdep = depth(root->right); if (abs(ldep - rdep) > 1) return false; return isBalanced(root->left) && isBalanced(root->right); } int depth(TreeNode* root) { if (!root) return 0; int ldep = depth(root->left); int rdep = depth(root->right); return ldep >= rdep ? ldep + 1: rdep + 1; } };
|
近期评论