二叉树的深度 面试之27
2012-11-28 16:56
302 查看
转载自:July http://blog.csdn.net/v_JULY_v/article/details/6126406
(27)-二元树的深度
题目:输入一棵二元树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。例如:输入二元树:
10
/ \
6 14
/ / \
4 12 16
输出该树的深度3。
二元树的结点定义如下:
struct SBinaryTreeNode
// anode of the binary tree
{
int m_nValue;
// value of node
SBinaryTreeNode *m_pLeft; // left child of node
SBinaryTreeNode *m_pRight; // rightchild of node
};
分析:这道题本质上还是考查二元树的遍历。
题目给出了一种树的深度的定义。当然,我们可以按照这种定义去得到树的所有路径,也就能得到最长路径以及它的长度。只是这种思路用来写程序有点麻烦。
我们还可以从另外一个角度来理解树的深度。如果一棵树只有一个结点,它的深度为1。如果根结点只有左子树而没有右子树,那么树的深度应该是其左子树的深度加1;同样如果根结点只有右子树而没有左子树,那么树的深度应该是其右子树的深度加1。如果既有右子树又有左子树呢?那该树的深度就是其左、右子树深度的较大值再加1。
上面的这个思路用递归的方法很容易实现,只需要对遍历的代码稍作修改即可。参考代码如下:
///////////////////////////////////////////////////////////////////////
// Get depth of a binary tree
// Input: pTreeNode - the head of a binary tree
// Output: the depth of a binary tree
///////////////////////////////////////////////////////////////////////
int TreeDepth(SBinaryTreeNode *pTreeNode)
{
// the depthof a empty tree is 0
if(!pTreeNode)
return0;
// the depthof left sub-tree
intnLeft = TreeDepth(pTreeNode->m_pLeft);
// the depthof right sub-tree
intnRight = TreeDepth(pTreeNode->m_pRight);
// depth isthe binary tree
return(nLeft > nRight) ? (nLeft + 1) : (nRight + 1);
}
以下是完整代码:
typedef struct LBitNode { int m_value; struct LBitNode *lchild,*rchild; }LNode,*BiTree; void createBiTree(BiTree& t) { int i; scanf("%d",&i); if(i) { t=(BiTree)malloc(sizeof(LNode)); t->lchild=NULL; t->rchild=NULL; t->m_value=i; createBiTree(t->lchild); createBiTree(t->rchild); } else { t=NULL; } } void Traverse(BiTree t) { if(t) { cout<<t->m_value<<" "; Traverse(t->lchild); Traverse(t->rchild); } } int depth(BiTree t) { if(t==NULL) { return 0; } int left=depth(t->lchild); int right=depth(t->rchild); return left>right?left+1:right+1; } int main() { BiTree t=NULL; createBiTree(t); Traverse(t); cout<<depth(t); return 0; }
相关文章推荐
- 【LeetCode-面试算法经典-Java实现】【104-Maximum Depth of Binary Tree(二叉树的最大深度)】
- 微软等数据结构+算法面试100题(35)-- 二叉树的深度
- 【LeetCode-面试算法经典-Java实现】【104-Maximum Depth of Binary Tree(二叉树的最大深度)】
- 【LeetCode-面试算法经典-Java实现】【111-Minimum Depth of Binary Tree(二叉树的最小深度)】
- 【笔试/面试】—— 二叉树的深度和宽度
- 面试算法(三十九)二叉树的深度
- 微软面试100题系列---二叉树的深度
- 剑指offer-第六章面试中的各项能力(二叉树的深度)
- 笔试面试之二叉树的深度
- 【LeetCode-面试算法经典-Java实现】【111-Minimum Depth of Binary Tree(二叉树的最小深度)】
- 【剑指Offer面试编程题】 题目1350:二叉树的深度--九度OJ
- 【剑指Offer面试编程题】 题目1350:二叉树的深度--九度OJ
- leetcode:Maximum Depth of Binary Tree(计算二叉树深度) 【面试算法】
- 剑指Offer:面试题39 二叉树的深度
- 二叉树创建以及遍历(j简单创建、遍历、叶子计数、深度计数、销毁)之1
- 知识迁移能力-二叉树的深度
- 二叉树的建立(非递归建立与定义建立)与基本操作(广度和深度遍历,求叶子树高)实现
- [置顶] 轻松搞定面试中的二叉树题目
- 二叉树的各种操作(面试必备)
- 【leetcode】Minimum Depth of Binary Tree 二叉树的最小深度 (JAVA)