平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过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 。

 

解:这道题思路是用左右子树的最大深度求解,但如果只求根下的左右子树的深度的话效率太慢,此解法在发现任一子树高度不平衡的情况下即返回

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     bool isBalanced(TreeNode* root) {
13         return findDeep(root)!=-1;
14     }
15     
16     int findDeep(TreeNode* root)
17     {
18         int i_deepL=0,i_deepR=0;
19         if(root==nullptr)
20         {
21             return 0;
22         }
23         i_deepL+=findDeep(root->left);
24         i_deepR+=findDeep(root->right);
25         if(i_deepL==-1||i_deepR==-1)
26         {
27             return -1;
28         }
29         if(i_deepL-i_deepR>1||i_deepR-i_deepL>1)
30         {
31             return -1;
32         }
33         return max(i_deepL,i_deepR)+1;          //加上本层的高度
34     }
35 };

 

posted @ 2019-08-16 14:44  大老虎打老虎  阅读(168)  评论(0编辑  收藏  举报