您的位置:首页 > 其它

110.[Leetcode]Balanced Binary Tree

2016-05-13 18:07 351 查看

题意:

判断一个二叉树是不是平衡二叉树

别人的思路:

使用递归对于每一个点判断是否平衡点,所以需要一个计算此点深度的getDepth()方法

int  getDepth(TreeNode *node)
{
int left =0;
int right=0;

if (node == NULL)
return 0;

if (node->left != NULL)
left = getDepth(node->left);

if (node->right != NULL)
right = getDepth(node->right);

return (left > right? left : right) + 1;
}
bool isBalanced(TreeNode* root) {

if (root == NULL)
return true;

if (abs(getDepth(root->left) - getDepth(root->right)) > 1)
return false;

return (isBalanced(root->left) && isBalanced(root->right));

}


我的思路:

这题我的方法beat 80%,虽然也不是很多但是是我个人的新高啊!

而且看起来简洁很多有木有!

class Solution {
public:
bool isBalanced(TreeNode* root) {
bool the = true;
//这里这个布尔值the,之后作为引用传入的,之所以作为引用是因为我希望在不断的递归中一直用the来存储是否仍旧满足平衡树条件
btree(0,root,the);
return the;
}

int btree(int i,TreeNode* node, bool &the){ //btree是返回此树的深度的

if(node == NULL || the == false) return i; //如果该节点为NULL,说明递归到底了,可以返回,或者前面已经判断存在 非平衡状态了,那么之后就其实没必要递归了,也直接返回

int left = btree(i+1,node->left,the);
int right = btree(i+1,node->right,the);
if(left-right > 1 || right-left > 1) the = false; //计算出左右节点的深度,如果绝对值大于1,则the置为false,the是引用,可以想象成全局的

return max(left,right); //此节点的高度为子节点最大值
}
};


Tips:

在思考算法的时候,我进了一个坑,那就是想存储所有叶子结点的大小,然后比较最大值和最小值差值是否大于1.

但是这是错误的思路,因为一个节点的深度是其 最大深度

比如一个节点

左边,最深是 5

右边,最深是 4,但是存在 3 的子节点

此节点是平衡的,但是存在 5-3 > 1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: