题目概述
题目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;
}