Leetcode每日一题:110.balanced-binary-tree(平衡二叉树)

Leetcode每日一题:110.balanced-binary-tree(平衡二叉树)_第1张图片
思路:依旧是递归,这里暂时只想到了比较笨的方法,就是对从上至下对当前结点的左右孩子,遍历得出它们高度,然后做差,判断是否满足平衡二叉树的条件; 想过动态规划和从下至上的思想,但技术没到位,没能实现出来,;
Leetcode每日一题:110.balanced-binary-tree(平衡二叉树)_第2张图片
并不是根节点满足条件就是平衡二叉树,存在这样一种情况:
Leetcode每日一题:110.balanced-binary-tree(平衡二叉树)_第3张图片

struct TreeNode
{
	int val;
	TreeNode *left;
	TreeNode *right;
	TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
bool isBalanced(TreeNode *root)
{
	if(root==NULL)
		return true;
	int l=Count(root->left,1);//得到左孩子的高度
	int r=Count(root->right,1);//得到右孩子的高度
	if(l-r>1||r-l>1)
		return false;
	return isBalanced(root->left) && isBalanced(root->right);//循环判断左孩子与右孩子是否满足条件
}

int Count(TreeNode* root,int count)//得到当前root结点高度
{
	if(root==NULL)
		return count;
	int l=Count(root->left,count+1);
	int r=Count(root->right,count+1);

	return l>r?l:r;
}

你可能感兴趣的:(Leetcode,二叉树,算法,leetcode)