您的位置:首页 > 职场人生

【面试题】剑指Offer-39-求二叉树的深度和判断一颗树是否为平衡二叉树

2017-04-18 09:29 459 查看

题目概述

题目1:求二叉树的深度



题目2:判断一颗二叉树是否为平衡二叉树



解题思路

求二叉树的深度

二叉树的深度呢,这个问题比较简单

递归遍历一遍二叉树,每到一个节点,便返回左子树和右子树深度较大的那个

并+1返回



判断一颗树是否为平衡二叉树

这里呢,也要用到深度

所谓的平衡二叉树,就是左子树的深度和右子树的深度相差的绝对值小于2

每到一个节点,便定义leftDepth和rightDepth

并用先序遍历向左递归,左子树遍历完了后向右递归

如此,每个节点的左右子树的深度都可以记下来

通过判断,便可以知道是否为平衡二叉树了

代码实现

求二叉树的深度

//求二叉树的深度
size_t Depth(BTNode* root)
{
if (root == NULL)
return 0;

int leftDepth = Depth(root->left);
int rightDepth = Depth(root->right);

return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}

判断一颗二叉树是否为平衡二叉树

//判断一颗二叉树是否为平衡二叉树
bool IsBalance(BTNode* root, size_t& depth)
{
if (root == NULL)
{
depth = 0;
return true;
}

size_t leftDepth = 0;
size_t rightDepth = 0;

bool LeftIsBalance = IsBalance(root->left, leftDepth);
bool RightIsBalance = IsBalance(root->right, rightDepth);

bool CT_IsBalance = LeftIsBalance && RightIsBalance;

if (CT_IsBalance)
{
depth = leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
return (leftDepth - rightDepth)< 2;
}

return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: