地址 https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof/
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过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 。 限制: 0 <= 树的结点个数 <= 10000 注意:本题与主站 110 题相同:https://leetcode-cn.com/problems/balanced-binary-tree/
解答
树的遍历 参数中额外添加该节点的左子树和右子树的深度
那么在遍历完回溯的过程中 就可以判断每个节点的左右子树的深度差
如果任意节点的深度差不满足平衡条件 那么就将答案置为false
如图
1
/
2 2
/
3 3
/
4 4
/** * 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 dfs(TreeNode* root,int deep){ if(root==NULL) return deep; int l = dfs(root->left,deep+1); int r = dfs(root->right,deep+1); if(ans == false ) return -1; if( abs(l-r)> 1) { ans =false; return -1;} return max(l,r); } bool isBalanced(TreeNode* root) { if(root==NULL) return true; int l = dfs(root->left,0); int r = dfs(root->right,0); if(ans == false ) return ans; if(abs(l-r) <= 1) return true; return false; } };