【转】http://zhedahht.blog.163.com/blog/static/25411174200732975328975/
题目:输入一棵二元树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
例如:输入二元树:
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);
}
分享到:
相关推荐
- 求二元树深度通常采用递归方法,分别计算左子树和右子树的深度,取最大值加1即为树的深度。 3. **整数的二进制表示中1的个数**: - 这个问题可以通过位操作解决,例如使用循环或递归,逐位检查二进制表示中的1...
- **树的生长**:从根节点开始,通过比较所有特征的划分效果,选取最优特征进行划分,然后对每个子集重复此过程,直到满足停止条件,如达到预设的最大深度、节点包含的样本数过少或信息增益低于阈值等。 2. **剪枝...
训练过程包括设定树的最大深度、最小叶节点样本数等参数,以及选择合适的损失函数,如均方误差(MSE)或其他定制的损失函数。 `brtTrain.m`代表增强的二元回归树(Boosted Binary Regression Trees)的训练函数。...
二元树(Binary Trees)是计算机科学中一种基础的数据结构,尤其在算法和数据结构领域具有重要的地位。在二元树中,每个节点最多有两个子节点,通常称为左子节点和右子节点。这种结构允许数据以分层的方式存储,便于...
二元树,也被称为二叉树,是计算机科学中一种基本的数据结构,它是由节点(或称为顶点)和边构成的。每个节点最多有两个子节点,分别被称为左子节点和右子节点。这种结构在许多算法和数据存储中都有应用,如搜索、...
二元树(Binary Trees)是计算机科学中一种重要的数据结构,它们在许多算法和程序设计问题中发挥着关键作用。二元树的每个节点最多有两个子节点,通常称为左子节点和右子节点。这种数据结构允许快速查找、插入和删除...
**深度优先遍历 (DFS)**:从起始顶点出发,尽可能深地搜索树的分支。 **广度优先遍历 (BFS)**:从起始顶点出发,一层一层地向外扩展。 ### 链表操作 **单向链表**:每个节点包含一个指向下一个节点的指针。 **...
在数学建模中,MATLAB是一种常用的编程工具,可以用来实现图论算法,如最小生成树的计算和广度优先搜索或深度优先搜索的遍历。MATLAB提供了方便的数据结构和函数支持,使得构建和操作图变得相对简单。 **应用实例**...
本篇主要探讨了在 Spark Mllib 库下如何实现决策树进行二元分类,并以网站分类为例,介绍了模型评估的重要指标——AUC(Area under the Curve of ROC)。 决策树是一种基于树形结构进行预测的算法,它通过不断分裂...
如果性能不佳,可能需要调整参数,如改变树的深度、特征选择策略等,进行模型优化。 在提供的“content”文件中,可能包含了具体的数据集、代码示例、模型训练结果或解释。为了深入理解“决策树2gram”的具体应用,...
- CART算法:用于构建分类与回归树,支持二元和多元分类,以及连续变量。 4. **Python实现**: 在Python中,`sklearn`库的`tree`模块提供了决策树的实现。例如,可以使用`DecisionTreeClassifier`类创建分类决策...
- 每棵树的最大深度设为10。 - 节点上的最小训练样本数为1。 - 训练集样本大小与原始数据集相同。 - 在每个分裂点上考虑的特征数为7(即所有特征的平方根)。 通过改变树的数量,可以观察到模型性能的变化。...
在这个主题中,我们看到多个关于数据结构的问题,包括二元树、栈、完全二元树、最小生成树、二元查找树以及遍历算法。 1. **二元分类树**:在二元分类树中,如果要使得遍历的结果按关键字递减顺序排列,通常采用...
- 达到预定的最大树深度。 - 叶节点中的样本数量小于预设的最小值。 - 节点中的样本纯度已经达到一定水平。 #### 五、决策树分裂实例 以泰坦尼克号生存预测问题为例,假设数据集包含以下特征:性别、年龄和随行...
1. 模糊逻辑:模糊逻辑是处理不精确或不确定信息的工具,它扩展了传统二元逻辑的概念,允许存在不同程度的“真”。在实际应用中,模糊逻辑常用于控制和决策系统,如智能家电的控制、自动驾驶汽车的决策等。 2. 神经...
决策树的生成通过递归地选择最佳属性进行划分,直到满足停止条件(如节点样本数过少、熵减少不明显或树深度过大)。生成的树可能过拟合训练数据,因此需要剪枝以提高泛化性能,这通常通过预剪枝(提前停止分裂)和后...
- 一棵树可以用二元组Tree = (root, F)来表示,其中root是树的根节点,F是由m个子树组成的森林,每个Ti=(ri, Fi)是根root的第i棵子树。根节点与其子树森林之间存在特定的关系,即RF是一个包含所有子树与根节点关系...