题目来源:牛客网
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
题目解析:
平衡二叉树的概念:左右子树的深度相差不大于1即可。
根据上一题,求树的深度即可调用。
代码:
class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot == NULL) return true; return (abs(getDepth(pRoot->left) - getDepth(pRoot->right)) <=1)&&(IsBalanced_Solution(pRoot->left))&&(IsBalanced_Solution(pRoot->right)); } int getDepth(TreeNode* pRoot) { if(pRoot == NULL) return 0; int len1 = getDepth(pRoot->left); int len2 = getDepth(pRoot->right); return ((len1 > len2)?len1:len2 )+ 1; } };
运行时间:4ms;占用内存:480k
很明显递归的时候会重复计算跟的深度。
换一种递归:
class Solution {
public:
bool flag = true;
bool IsBalanced_Solution(TreeNode* pRoot) {
getDepth(pRoot);
return flag;
}
int getDepth(TreeNode* pRoot)
{
if(pRoot == NULL)
return 0;
int left = getDepth(pRoot->left);
int right = getDepth(pRoot->right);
if(abs(left -right) > 1) //注意,这个地方很诡异,不能设为<=1时为false。
flag = false;
return (left>right?left:right)+1;
}
};
运行时间:3ms;占用内存:484k