平衡二叉树

题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。

 

这道题比较考验思维。平衡二叉树的条件是左、右子树的深度差不大于1,所以我们首先需要计算出二叉树的深度。而这道题需要返回的并不是深度,而是一个布尔值,因此我们初始认为这棵树是平衡的,在计算深度的过程中,如果发现左、右子树的深度大于1了,就将答案置为false。

计算深度我们应该另开一个函数进行递归操作,一棵树的深度是它的左子树和右子树这两者中最大的子树深度+1。递归计算左子树的深度和右子树的深度,返回的是整棵树的深度,在计算左、右子树深度的过程中,如果发现深度差大于1,就将答案置为false。

 

c++代码如下:

 1 class Solution {
 2 public:
 3     bool ans = true;
 4     bool IsBalanced_Solution(TreeNode* pRoot) {
 5         dfs(pRoot);
 6         return ans;
 7     }
 8     
 9     int dfs(TreeNode* pRoot){
10         if(!pRoot) return 0;
11         int left = dfs(pRoot->left);
12         int right = dfs(pRoot->right);
13         if(abs(left - right) > 1) ans = false;
14         return max(left, right) + 1;
15     }
16 };

 

posted @ 2019-12-23 11:44  wtzhang  阅读(127)  评论(0编辑  收藏  举报