`
蒙面考拉
  • 浏览: 160612 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

二元树的深度(09)【树】

 
阅读更多

题目:输入一棵二元树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

例如:输入二元树:

                                            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);
}

分享到:
评论

相关推荐

    决策树二元分类

    - **树的生长**:从根节点开始,通过比较所有特征的划分效果,选取最优特征进行划分,然后对每个子集重复此过程,直到满足停止条件,如达到预设的最大深度、节点包含的样本数过少或信息增益低于阈值等。 2. **剪枝...

    matlab开发-增强的二元回归树

    训练过程包括设定树的最大深度、最小叶节点样本数等参数,以及选择合适的损失函数,如均方误差(MSE)或其他定制的损失函数。 `brtTrain.m`代表增强的二元回归树(Boosted Binary Regression Trees)的训练函数。...

    binary_trees:二元树

    二元树(Binary Trees)是计算机科学中一种基础的数据结构,尤其在算法和数据结构领域具有重要的地位。在二元树中,每个节点最多有两个子节点,通常称为左子节点和右子节点。这种结构允许数据以分层的方式存储,便于...

    二元树

    二元树,也被称为二叉树,是计算机科学中一种基本的数据结构,它是由节点(或称为顶点)和边构成的。每个节点最多有两个子节点,分别被称为左子节点和右子节点。这种结构在许多算法和数据存储中都有应用,如搜索、...

    哈工大考研题

    **深度优先遍历 (DFS)**:从起始顶点出发,尽可能深地搜索树的分支。 **广度优先遍历 (BFS)**:从起始顶点出发,一层一层地向外扩展。 ### 链表操作 **单向链表**:每个节点包含一个指向下一个节点的指针。 **...

    binary_trees-源码

    二元树(Binary Trees)是计算机科学中一种重要的数据结构,它们在许多算法和程序设计问题中发挥着关键作用。二元树的每个节点最多有两个子节点,通常称为左子节点和右子节点。这种数据结构允许快速查找、插入和删除...

    数学建模 图论 课件 最小生成树 广度和深度搜索

    在数学建模中,MATLAB是一种常用的编程工具,可以用来实现图论算法,如最小生成树的计算和广度优先搜索或深度优先搜索的遍历。MATLAB提供了方便的数据结构和函数支持,使得构建和操作图变得相对简单。 **应用实例**...

    决策树和随机森林的学习报告

    - 每棵树的最大深度设为10。 - 节点上的最小训练样本数为1。 - 训练集样本大小与原始数据集相同。 - 在每个分裂点上考虑的特征数为7(即所有特征的平方根)。 通过改变树的数量,可以观察到模型性能的变化。...

    决策树,决策树算法,Python

    - CART算法:用于构建分类与回归树,支持二元和多元分类,以及连续变量。 4. **Python实现**: 在Python中,`sklearn`库的`tree`模块提供了决策树的实现。例如,可以使用`DecisionTreeClassifier`类创建分类决策...

    机器学习实战之树回归

    CART算法的基本思想是通过最大化信息增益或基尼不纯度来选择最优分割特征,并采用二元切分来构建树结构。对于回归问题,CART算法通常使用的是平方误差最小化作为分裂标准,即寻找能够最大程度减少子集内预测值方差的...

    Spark Mllib 下的决策树二元分类 —— 网站分类(2)

    本篇主要探讨了在 Spark Mllib 库下如何实现决策树进行二元分类,并以网站分类为例,介绍了模型评估的重要指标——AUC(Area under the Curve of ROC)。 决策树是一种基于树形结构进行预测的算法,它通过不断分裂...

    机器学习决策树的分裂到底是什么?这篇文章讲明白了.docx

    - 达到预定的最大树深度。 - 叶节点中的样本数量小于预设的最小值。 - 节点中的样本纯度已经达到一定水平。 #### 五、决策树分裂实例 以泰坦尼克号生存预测问题为例,假设数据集包含以下特征:性别、年龄和随行...

    一种数据结构—三叉树.pdf

    三叉树的数学模型可以用一个有序对 (D, R) 表示,其中 D 是数据元素的集合,R 是定义在 D 上的二元关系集合。在三叉树中,存在一个唯一的根节点,没有双亲节点;除根节点外的每个节点都有唯一的双亲节点。三叉树具有...

    决策树2gram.zip

    如果性能不佳,可能需要调整参数,如改变树的深度、特征选择策略等,进行模型优化。 在提供的“content”文件中,可能包含了具体的数据集、代码示例、模型训练结果或解释。为了深入理解“决策树2gram”的具体应用,...

    表达式算法使用了树结构

    除了基本的二元运算表达式树,还可以扩展到更复杂的多运算符和函数调用。例如,可以使用带有多个子节点的内部节点来表示括号表达式,或者使用带有不同参数类型的节点来表示函数调用。 在实际编程中,表达式树通常...

    chapter树和二叉树实用PPT课件.pptx

    - 一棵树可以用二元组Tree = (root, F)来表示,其中root是树的根节点,F是由m个子树组成的森林,每个Ti=(ri, Fi)是根root的第i棵子树。根节点与其子树森林之间存在特定的关系,即RF是一个包含所有子树与根节点关系...

Global site tag (gtag.js) - Google Analytics