【问题标题】:How to find out deepest node in the BST?如何找出 BST 中最深的节点?
【发布时间】:2011-12-05 12:01:42
【问题描述】:
private int Depth(TreeNode node)
{
    if (node == null)
    {
        return -1;
    }
    else
    {
        return 1 + Math.Max(Depth(node.LeftNode),Depth(node.RightNode));
    }
}

我写了寻找最深节点的方法,但我不确定这个方法。
这是找到最深节点的正确方法吗?

【问题讨论】:

    标签: c# visual-studio-2010 binary-tree binary-search-tree


    【解决方案1】:

    (假设你想要得到的是树的高度,包括作为参数给出的节点)

    对于空树 (node == null),您将获得 -1 的深度。 对于具有 1 个节点的树,您将收到:

    1 + max(-1, -1) = 0
    

    以此类推,返回0 应该可以解决问题,但总体思路没问题。

    至于优化...如果您只知道这棵树是二叉树,那么这是您在不缓存节点高度的情况下可以获得的最佳效果。

    至于寻找最近的叶子你可以使用BFS算法来高效地完成它,因为它会水平地去发现节点,然后当你发现第一片叶子时你可以停下来。

    BFS 伪代码:

    nodes.enqueue( tuple(node, 1)) //高度== 1的入队节点 而(节点数> 0) { (节点, h) = 节点.dequeue() if (node.left == null && node.right == null) 返回 h; //如果是我们找到的第一片叶子,返回它的高度。 //将我们的孩子的身高排入队列 如果 (node.left != null) 节点.enqueue(node.left, h+1); 如果 (node.right != null) 节点.enqueue(node.right, h+1); }

    【讨论】:

    • 那么最小深度节点呢?我认为最接近/最接近根的节点是最小深度节点。
    • 嗯,你问的是最深节点,你怎么理解“最深”?在我的理解中,它是具有尽可能多的父节点的节点,这使得它成为具有最高深度的节点。
    【解决方案2】:

    BST 的最深节点称为高度。

    Here你可能会看到如何计算 BST 的高度。

    基本上你所拥有的都是对的。

    【讨论】:

    • 那么最小深度节点呢?我认为最接近/最接近根的节点是最小深度节点
    • 你想要的可能是最靠近根的第一片叶子的距离。您可以通过停止递归并在达到第一个 null 时立即返回值来实现。
    • 能不能用迭代的方式解释清楚一点
    猜你喜欢
    • 2021-12-02
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 2012-11-03
    • 1970-01-01
    相关资源
    最近更新 更多