java - 如何计算二叉搜索树的深度

标签 java recursion binary-search-tree

我想计算二叉搜索树每个节点深度的总和。

元素的各个深度尚未存储。

最佳答案

像这样:

int countChildren(Node node)
{
    if ( node == null )
        return 0;
    return 1 + countChildren(node.getLeft()) + countChildren(node.getRight());
}

并得到每个 child 的深度总和:

int sumDepthOfAllChildren(Node node, int depth)
{
    if ( node == null )
        return 0;  // starting to see a pattern?
    return depth + sumDepthOfAllChildren(node.getLeft(), depth + 1) + 
                   sumDepthOfAllChildren(node.getRight(), depth + 1);
}

如果这是家庭作业,现在希望提供信息丰富的解释。计算节点数非常简单。首先,如果节点不是节点(node == null),则返回 0。如果是节点,则首先计算其自身(1 ) 加上其左子树中的节点数加上其右子树中的节点数。另一种思考方式是您通过 BFS 访问每个节点,并为您访问的每个节点的计数加一。

深度求和类似,除了不是为每个节点只添加一个,而是节点添加其自身的深度。它知道自己的深度,因为它的 parent 告诉它。每个节点都知道它的 child 的深度是它自己的深度加一,所以当你得到一个节点的左右 child 的深度时,你告诉他们他们的深度是当前节点的深度加一。

同样,如果节点不是节点,则它没有深度。因此,如果您想要所有根节点的子节点的深度总和,您可以像这样传入根节点和根节点的深度:sumDepthOfAllChildren(root, 0)

递归非常有用,它只是一种非常不同的思考事物的方式,需要练习才能习惯它

关于java - 如何计算二叉搜索树的深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1876255/

相关文章:

java - 如何将 application.yml 中的类属性与具有不同类名的 java 类相匹配?

java - 运行时获取jar版本

c++ - 查找数组中第一个错误的递归函数

javascript - 如何提出正确的递归解决方案

c - 当 malloc 在递归构建过程中失败时,我们如何处理释放 BST?

java - 不使用系统时间获取某个国家/地区的当前日期时间

java - 运行 mvn clean install 时出现 Maven 错误?

Python顺序遍历到一个平面列表

python - 为什么我的参数/对象显示为 NoneType 对象?

c++ - 二叉搜索树中节点/值的频率