【面试题】剑指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;
}
相关文章推荐
- 剑指offer 面试题39 求二叉树深度|判断是否为平衡二叉树
- 剑指Offer_面试题39_二叉树的深度 & 判断平衡二叉树
- 剑指offer 39-二叉树的深度 判断二叉树是否为平衡二叉树
- 剑指offer面试题39:二叉树深度以及判断平衡二叉树
- 剑指Offer面试题39二叉树的深度(以及判断平衡二叉树),面试题40数组中只出现一次的数字
- 剑指offer 39.判断二叉树是否为平衡二叉树
- 剑指offer面试题之判断一颗二叉树是不是平衡二叉树
- 面试题39:获得二叉树深度和判断是否是平衡二叉树
- 剑指offer——面试题39:扩展问题判断一个树是否是平衡二叉树(递归)
- 剑指Offer 39题 二叉树的深度 && 判断平衡二叉树 Java版
- 剑指offer 39. 二叉树的深度和判断是否为平衡二叉树
- 剑指Offer----面试题39(2):判断是否为平衡二叉树
- 【剑指offer】判断二叉树是否为平衡二叉树
- 【剑指offer】面试题39:深度二叉树
- 剑指Offer面试题39(Java版):二叉树的深度
- 剑指 offer代码解析——面试题39判断平衡二叉树(高效方法)
- 剑指Offer--039-平衡二叉树(判断一棵二叉树是否是平衡二叉树)[扩展附加题]
- 剑指 offer代码解析——面试题39判断平衡二叉树
- 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解
- 剑指 offer代码解析——面试题39判断平衡二叉树