题意:
输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。
平衡二叉树(Balanced Binary Tree),具有以下性质:
它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
方法一:
递归
思路:记录每个节点作为根的子树高度。递归。
当左右子树的高度差>1,则返回 false;否则返回 true。
class Solution {
public:
bool flag=true;
bool IsBalanced_Solution(TreeNode* pRoot) {
dfs(pRoot);
return flag;
}
int dfs(TreeNode* root){//记录每个节点作为根的子树高度
if(root==nullptr)
return 0;
int t1=dfs(root->left);//左节点
int t2=dfs(root->right);//右节点
if(abs(t1-t2)>1){//高度差>1,则返回false
flag=false;
}
return max(t1,t2)+1;
}
};
时间复杂度:
空间复杂度:![]()
方法二:
递归+剪枝
思路:参照方法一,但可以设置剪枝操作。
当发现左右子树的高度差>1,则置flag=false。剪枝操作:每次递归,都先判断flag是否false,如果 flag == false ,则直接 return 。
class Solution {
public:
bool flag=true;
bool IsBalanced_Solution(TreeNode* pRoot) {
dfs(pRoot);
return flag;
}
int dfs(TreeNode* root){//记录每个节点作为根的子树高度
if(flag==false)//剪枝
return -1;
if(root==nullptr)
return 0;
int t1=dfs(root->left);//左节点
int t2=dfs(root->right);//右节点
if(abs(t1-t2)>1){//高度差>1,则返回false
flag=false;
return -1;
}
return max(t1,t2)+1;
}
};
时间复杂度:
空间复杂度:![]()



京公网安备 11010502036488号