110. 平衡二叉樹
給定一個二叉樹,判斷它是否是?平衡二叉樹??
示例 1:
輸入:root = [3,9,20,null,null,15,7] 輸出:true
示例 2:
輸入:root = [1,2,2,3,3,null,null,4,4] 輸出:false
示例 3:
輸入:root = [] 輸出:true
提示:
- 樹中的節點數在范圍?
[0, 5000]
?內 -104 <= Node.val <= 104
遞歸法
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public://遞歸法:使用左右中求得樹的高度int fuc(TreeNode* root){if(root==nullptr)return 0;int left =fuc(root->left);//左if(left == -1)return -1;//說明不是平衡樹int right =fuc(root->right);//右if(right==-1)return -1;//說明不是平衡樹//中if(abs(left-right)>1)return -1;else return 1+max(left,right);}bool isBalanced(TreeNode* root) {return fuc(root)==-1?false:true;}
};
區分一下關于求高度和求深度的方法:
? ? ? ? 之前做過關于求深度的方法可以是前序遍歷、后序遍歷、層次遍歷
? ? ? ? 但是求高度應該用后序遍歷才行