【剑指offer】16.判断是不是平衡二叉树

总目录:

算法之旅导航目录

 

1.问题描述

输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1(<=1),并且左右两个子树都是一棵平衡二叉树。
注:我们约定空树是平衡二叉树。
 

2.问题分析

  1递归,检查每个子树是否是平衡


3.代码实例

递归

 1 class Solution {
 2   public:
 3     int GetTreeDepth(TreeNode* pRoot) {
 4         //中止条件
 5         if (!pRoot) {
 6             return 0;
 7         }
 8 
 9         //递归调用
10         auto left = GetTreeDepth(pRoot->left);
11         auto right = GetTreeDepth(pRoot->right);
12 
13         //本层逻辑
14         //返回较大的一个
15         auto depth = left > right ? left + 1 : right + 1;
16         return depth;
17     }
18     bool IsBalanced_Solution(TreeNode* pRoot) {
19         //空树认为是平衡二叉树
20         if (!pRoot) {
21             return true;
22         }
23 
24         //如果左右深度不对称,高度差>1
25         auto left = GetTreeDepth(pRoot->left);
26         auto right = GetTreeDepth(pRoot->right);
27         if (abs(left - right) > 1) {
28             return false;
29         }
30 
31         //递归调用
32         bool isLeftB = IsBalanced_Solution(pRoot->left);
33         bool isRightB = IsBalanced_Solution(pRoot->right);
34         return isLeftB && isRightB;
35     }
36 };
View Code

 

posted @ 2022-11-11 18:24  啊原来是这样呀  阅读(15)  评论(0编辑  收藏  举报