题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。
这道题比较考验思维。平衡二叉树的条件是左、右子树的深度差不大于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 };