题目:输入一棵二元树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
例如:输入二元树:
10
/ \
6 14
/ / \
4 12 16
输出该树的深度3。
二元树的结点定义如下:
struct SBinaryTreeNode // a node of the binary tree
{
int m_nValue; // value of node
SBinaryTreeNode *m_pLeft; // left child of node
SBinaryTreeNode *m_pRight; // right child 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 depth of a empty tree is 0
if(!pTreeNode)
return 0;
// the depth of left sub-tree
int nLeft = TreeDepth(pTreeNode->m_pLeft);
// the depth of right sub-tree
int nRight = TreeDepth(pTreeNode->m_pRight);
// depth is the binary tree
return (nLeft > nRight) ? (nLeft + 1) : (nRight + 1);
}
发表评论
-
析构函数为虚函数的原因
2012-09-09 11:42 832我们知道,用C++开发的时候,用来做基类的类的析构函数 ... -
hash的应用
2012-08-31 23:02 962第一部分为一道百度面试题Top K算法的详解;第二部分为关 ... -
微软智力题
2012-08-29 19:59 567第一组1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有 ... -
C++不能被继承的类
2012-08-27 20:16 1059一个类不能被继承, ... -
括号对齐问题
2012-08-27 10:47 1410解法一:左右括号成一对则抵消 可以 ... -
树的遍历
2012-08-19 10:43 719/****************************** ... -
堆排序
2012-08-16 14:24 884堆:(二叉)堆数据结构是一种数组对象。它可以被视为一棵完全 ... -
多态赋值
2012-08-14 16:16 832#include <iostream> usi ... -
static变量与static函数(转)
2012-08-13 10:15 746一、 static 变量 static变量大致分为三种用法 ... -
不用sizeof判断16位32位
2012-08-10 15:21 1704用C++写个程序,如何判断一个操作系统是16位还是3 ... -
找出连续最长的数字串(百度面试)
2012-08-09 15:15 1146int maxContinuNum(const char*in ... -
顺序栈和链栈
2012-08-06 10:01 800顺序栈:话不多说直接上代码 #include ... -
队列的数组实现和链表实现
2012-08-05 16:20 1026话不多少,数组实现上代码: #include<i ... -
KMP算法详解
2012-08-02 21:40 888KMP算法: 是在一个“主文本字符串” ... -
字符串的最长连续重复子串
2012-08-01 15:05 9780两种方法: 循环两次寻找最长的子串: <方法一> ... -
寻找一个字符串连续出现最多的子串的方法(转)
2012-07-31 21:19 986算法描述首先获得后缀数组,然后1.第一行第一个字符a,与第二行 ... -
字符串的循环移位
2012-07-31 16:52 975假设字符串:abcdefg 左循环两位:cdefgab 右 ... -
一次谷歌面试趣事(转)
2012-07-31 15:26 767很多年前我进入硅谷 ... -
约瑟夫环问题(循环链表)
2012-07-30 21:31 1291题目描述:n只猴子要选大王,选举方法如下:所有猴子按 1, ... -
面试之单链表
2012-07-30 20:18 7281、编程实现一个单链表的建立/测长/打印。 ...
相关推荐
- **树的生长**:从根节点开始,通过比较所有特征的划分效果,选取最优特征进行划分,然后对每个子集重复此过程,直到满足停止条件,如达到预设的最大深度、节点包含的样本数过少或信息增益低于阈值等。 2. **剪枝...
训练过程包括设定树的最大深度、最小叶节点样本数等参数,以及选择合适的损失函数,如均方误差(MSE)或其他定制的损失函数。 `brtTrain.m`代表增强的二元回归树(Boosted Binary Regression Trees)的训练函数。...
二元树(Binary Trees)是计算机科学中一种基础的数据结构,尤其在算法和数据结构领域具有重要的地位。在二元树中,每个节点最多有两个子节点,通常称为左子节点和右子节点。这种结构允许数据以分层的方式存储,便于...
二元树,也被称为二叉树,是计算机科学中一种基本的数据结构,它是由节点(或称为顶点)和边构成的。每个节点最多有两个子节点,分别被称为左子节点和右子节点。这种结构在许多算法和数据存储中都有应用,如搜索、...
**深度优先遍历 (DFS)**:从起始顶点出发,尽可能深地搜索树的分支。 **广度优先遍历 (BFS)**:从起始顶点出发,一层一层地向外扩展。 ### 链表操作 **单向链表**:每个节点包含一个指向下一个节点的指针。 **...
二元树(Binary Trees)是计算机科学中一种重要的数据结构,它们在许多算法和程序设计问题中发挥着关键作用。二元树的每个节点最多有两个子节点,通常称为左子节点和右子节点。这种数据结构允许快速查找、插入和删除...
在数学建模中,MATLAB是一种常用的编程工具,可以用来实现图论算法,如最小生成树的计算和广度优先搜索或深度优先搜索的遍历。MATLAB提供了方便的数据结构和函数支持,使得构建和操作图变得相对简单。 **应用实例**...
- 每棵树的最大深度设为10。 - 节点上的最小训练样本数为1。 - 训练集样本大小与原始数据集相同。 - 在每个分裂点上考虑的特征数为7(即所有特征的平方根)。 通过改变树的数量,可以观察到模型性能的变化。...
- CART算法:用于构建分类与回归树,支持二元和多元分类,以及连续变量。 4. **Python实现**: 在Python中,`sklearn`库的`tree`模块提供了决策树的实现。例如,可以使用`DecisionTreeClassifier`类创建分类决策...
CART算法的基本思想是通过最大化信息增益或基尼不纯度来选择最优分割特征,并采用二元切分来构建树结构。对于回归问题,CART算法通常使用的是平方误差最小化作为分裂标准,即寻找能够最大程度减少子集内预测值方差的...
本篇主要探讨了在 Spark Mllib 库下如何实现决策树进行二元分类,并以网站分类为例,介绍了模型评估的重要指标——AUC(Area under the Curve of ROC)。 决策树是一种基于树形结构进行预测的算法,它通过不断分裂...
- 达到预定的最大树深度。 - 叶节点中的样本数量小于预设的最小值。 - 节点中的样本纯度已经达到一定水平。 #### 五、决策树分裂实例 以泰坦尼克号生存预测问题为例,假设数据集包含以下特征:性别、年龄和随行...
三叉树的数学模型可以用一个有序对 (D, R) 表示,其中 D 是数据元素的集合,R 是定义在 D 上的二元关系集合。在三叉树中,存在一个唯一的根节点,没有双亲节点;除根节点外的每个节点都有唯一的双亲节点。三叉树具有...
如果性能不佳,可能需要调整参数,如改变树的深度、特征选择策略等,进行模型优化。 在提供的“content”文件中,可能包含了具体的数据集、代码示例、模型训练结果或解释。为了深入理解“决策树2gram”的具体应用,...
除了基本的二元运算表达式树,还可以扩展到更复杂的多运算符和函数调用。例如,可以使用带有多个子节点的内部节点来表示括号表达式,或者使用带有不同参数类型的节点来表示函数调用。 在实际编程中,表达式树通常...
- 一棵树可以用二元组Tree = (root, F)来表示,其中root是树的根节点,F是由m个子树组成的森林,每个Ti=(ri, Fi)是根root的第i棵子树。根节点与其子树森林之间存在特定的关系,即RF是一个包含所有子树与根节点关系...