牛客网
题目描述:输入一棵二叉树,判断该二叉树是否是平衡二叉树。
class Solution {
public:
bool IsBalanced_Solution(TreeNode* root) {
int left,right;
if (root == NULL)
{
return true;
}
left = FindDepth(root->left);
right = FindDepth(root->right);
if (left <=1 && right <= 1)
{
return true;
}
if (abs(left-right)>1)
{
return false;
}
else
{
return (IsBalanced_Solution(root->left)&&(IsBalanced_Solution(root->right)));
}
}
int FindDepth(TreeNode* root)
{
int left,right;
if (root == NULL)
{
return 0;
}
else
{
return FindDepth(root->left)>=FindDepth(root->right)?(FindDepth(root->left)+1):(FindDepth(root->right)+1);
}
}
};
最简单的两遍遍历,时间复杂度O(n^2)
参考其他方法
class Solution {
public:
bool isBalanced(TreeNode* root) {
bool balance = false;
int h = 0;
return Balance(root,h);
}
bool Balance(TreeNode* root,int &h)
{
if(root == NULL)
{
h = 0;
return true;
}
if(root->left==NULL&&root->right==NULL)
{
h = 1;
return true;
}
int hr,hl;
bool br = Balance(root->left,hl);
bool bl = Balance(root->right,hr);
h = (hl>hr?hl:hr)+1;//三目运算符
if(abs(hl-hr)<2)
return br&bl;
return false;
}
};
引用传值,时间复杂度n
class Solution:
def isBalanced(self, root: TreeNode) -> bool:
return self.depth(root) != -1
def depth(self, root):
if not root: return 0
left = self.depth(root.left)
if left == -1: return -1
right = self.depth(root.right)
if right == -1: return -1
return max(left, right) + 1 if abs(left - right) < 2 else -1
从底至顶(提前阻断法),对二叉树做DFS,时间复杂度n