class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
auto res = find_deep(pRoot);
if (res == -1)
return false;
else
return true;
}
int find_deep(TreeNode* pRoot){
if (pRoot == nullptr)
return 0;
auto right = find_deep(pRoot->right);
auto left = find_deep(pRoot->left);
if (right == -1 || left == -1)
return -1;
if (abs(right - left) > 1)
return -1 ;
else
return max(right, left) + 1;
}
};平衡二叉树的性质是:是一颗空树或者左右高度差不超过1,且其子树都是平衡二叉树,由性质联想递归方法。
看了一下大家的思路,还是有点相似的。
1、递归函数的作用是判断当前节点的深度同时判断其是否为平衡树,
(1)当左右深度差值超过1,return -1;否则return 树深度
(2)若一个节点的一个子树已经不平衡,则直接返回 -1
2、感觉这样的递归在判断一个子树返回 -1后,其他线路的节点还在继续判断,不能提前终止,没想到啥好方法。
欢迎交流指正!!!

京公网安备 11010502036488号