【剑指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 };