当前位置: 首页 > 知识库问答 >
问题:

互联网上关于二叉搜索树深度的大多数代码片段都是错误的吗?

何长恨
2023-03-14

我目前正在实施一个二叉搜索树。我的教材指出,树的深度等于最深的叶子的深度。节点本身的深度定义为从根到该节点的边数量。但是,当我想在互联网上检查我的实现是否正确时,我发现许多实现都是这样的:

int Tree::Depth()
{
    if (!this)
    {
        return 0;
    }

    return max(this->left.Depth(), this->right.Depth()) + 1;
}
  • http://codercareer.blogspot.be/2013/01/no-35-depth-of-binary-trees.html
  • 二叉搜索树的最大深度
  • 这两个代码之间有什么区别来找到二叉树的最大深度?
  • 如何计算二叉搜索树的深度

但是使用返回0给出了节点的数量而不是边的数量(节点的数量=边的数量1)。不应该是返回-1吗?Robert Sedgewick似乎也使用了-1:

/**
 * Returns the height of the BST (for debugging).
 *
 * @return the height of the BST (a 1-node tree has height 0)
 */
public int height() {
    return height(root);
}
private int height(Node x) {
    if (x == null) return -1;
    return 1 + Math.max(height(x.left), height(x.right));
}
  • http://algs4.cs.princeton.edu/30searching/

释义树的大小是其节点数。树中节点的深度是从它到根的路径上的链接数。树的高度是其节点之间的最大深度。

~罗伯特·塞奇威克和凯文·韦恩的算法(第四版)

深度为0的根的例子可见于第三版“算法简介”的第490页。托马斯·h·科尔曼、查尔斯·e·莱瑟森、罗纳德·L·李维斯特和克利福德·斯坦编辑。

有人能帮我澄清这个困惑吗?

共有1个答案

高钱青
2023-03-14

Sedgewick的实现是正确的。

节点的高度是从该节点到叶子的最长向下路径的长度。根的高度就是树的高度。

因此,树的高度大约是路径的长度(以边而不是节点来衡量)。只包含根节点的树的高度为0,甚至没有根节点(如果允许的话)的树被定义为高度为-1。

参考:树(数据结构)

 类似资料:
  • 这是我的代码: 首先,我从一个列表中做一个二叉查找树,并检查它是否是一个二叉查找树。 给定列表的第一个元素是根节点,后续元素成为子节点。到叶节点。 例如,调用 的结果为: 结果是二叉搜索树,因为左子节点小于父节点,右子节点大于父节点。因此,调用<code>bst_child</code>的结果是<code>True</code>。 然后我添加了寻找二叉查找树深度的代码。通过对第一个列表排序,我制作

  • 这是家庭作业。不要只发布代码。 我需要在二进制搜索树中找到给定数据点的深度。我实现了一个<code>depth()</code>方法和一个helper方法<code>countNodes()</code>,它递归地对节点进行计数。 如果我们要搜索的数据不在树中,我需要返回< code>-1。根据我的递归,我看不出这怎么可能。

  • 树的特征和定义 树(Tree)是元素的集合。我们先以比较直观的方式介绍树。下面的数据结构是一个树: 树有多个节点(node),用以储存元素。某些节点之间存在一定的关系,用连线表示,连线称为边(edge)。边的上端节点称为父节点,下端称为子节点。树像是一个不断分叉的树根。 每个节点可以有多个子节点(children),而该节点是相应子节点的父节点(parent)。比如说,3,5是6的子节点,6是3,

  • 我需要编写伪代码来检查有效的二叉树是否是搜索二叉树。 我创建了一个数组来保存树的顺序值。如果顺序值是降序的,这意味着它确实是BST。然而,我对INOVERAR方法中的递归有一些问题。 我需要更新数组的索引,以便按照值在树上的顺序将其提交给数组。 我不确定在递归过程中索引是否真的得到了正确更新。。到底是不是?如果你发现问题,能帮我解决吗?谢谢 伪代码 第一功能 IsBST(节点) 大小← 树化(节点

  • 下面是我用广度优先搜索逐级打印二叉树的Java解决方案(它有效!!) 同样的空间复杂性也适用于我的树变异吗?我还没有生成一个测试用例,其中BFS队列将保存树中的所有节点。即使二叉树退化为链表,如下面我从BST获得的图片中所示,对树的正常操作需要O(n)时间和O(n)空间,BFS队列也最多容纳1个元素。 谁能给我一个测试用例,在这个测试用例中,BFS队列将所有节点都保存在树中,证明空间复杂度为O(n

  • NowCoder 题目描述 从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 解题思路 // java public int TreeDepth(TreeNode root) { return root == null ? 0 : 1 + Math.max(TreeDepth(root.left), TreeDepth(root.right));