题意:判断二叉树是否为平衡树。左右子树高度差最多为1的树是平衡树。
法一:
(1)先判断左右子树是否为平衡树
(2)再判断左右子树是否高度差最多为1
(3)更新树高(root->val记录当前树高)
/** * 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 { public: bool isBalanced(TreeNode* root) { if(root == NULL) return true; if(!isBalanced(root -> left)) return false; if(!isBalanced(root -> right)) return false; int leftval, rightval; if(root -> left == NULL) leftval = 0; else leftval = root -> left -> val; if(root -> right == NULL) rightval = 0; else rightval = root -> right -> val; if(abs(leftval - rightval) > 1) return false; root -> val = max(leftval, rightval) + 1; return true; } };
法二:借助求树高判断是否为平衡树。
/** * 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 { public: bool ans = true; int maxDepth(TreeNode* root){ if(root == NULL) return 0; int l = maxDepth(root -> left); int r = maxDepth(root -> right); if(abs(l - r) > 1) ans = false; return max(l, r) + 1; } bool isBalanced(TreeNode* root) { maxDepth(root); return ans; } };