C# 如何找到BST中最深的节点?

C# 如何找到BST中最深的节点?,c#,visual-studio-2010,binary-tree,binary-search-tree,C#,Visual Studio 2010,Binary Tree,Binary Search Tree,我编写了查找最深节点的方法,但我不确定该方法是否正确。 这是找到最深节点的正确方法吗?BST的最深节点称为高度 您可以看到如何计算BST的高度 基本上您所拥有的是正确的。(假设您想要得到的是树的高度,包括作为参数给定的节点) 对于空树(node==null),深度为-1。 对于具有1个节点的树,您将收到: private int Depth(TreeNode node) { if (node == null) { return -1; } else

我编写了查找最深节点的方法,但我不确定该方法是否正确。

这是找到最深节点的正确方法吗?

BST的最深节点称为高度

您可以看到如何计算BST的高度

基本上您所拥有的是正确的。

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

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

private int Depth(TreeNode node)
{
    if (node == null)
    {
        return -1;
    }
    else
    {
        return 1 + Math.Max(Depth(node.LeftNode),Depth(node.RightNode));
    }
}
以此类推,返回
0
应该可以解决问题,但总体思路是可以的

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

至于查找最近的叶子,您可以使用算法来高效地进行,因为它将水平地查找节点,然后在发现第一个叶子时可以停止

BFS伪代码:

1 + max(-1, -1) = 0
nodes.enqueue(tuple(node,1))//将高度==1的节点排队 而(nodes.count>0) { (node,h)=nodes.dequeue() 如果(node.left==null&&node.right==null)返回h;//如果它是我们找到的第一片叶子,则返回它的高度。 //让我们的孩子知道他们的身高 if(node.left!=null) nodes.enqueue(node.left,h+1); if(node.right!=null) nodes.enqueue(node.right,h+1); }
那么最小深度节点呢?我认为离根最近的节点是最小深度节点你想要的可能是到离根最近的第一片叶子的距离。您可以通过停止递归并在到达第一个null时立即返回值来实现这一点。请您通过迭代方法更清楚地解释一下,那么最小深度节点呢?我认为离根更近/最近的节点是最小深度节点。嗯,你要求的是最深的节点,你如何理解“最深”?在我的理解中,正是这个节点有尽可能多的父节点到达根节点,这使得它成为具有最高深度的节点。 nodes.enqueue( tuple(node, 1)) //enqueue node with height == 1 while(nodes.count > 0) { (node, h) = nodes.dequeue() if (node.left == null && node.right == null) return h; //If it's first leaf we've found, return it's height. //Enqueue our childs with their height if (node.left != null) nodes.enqueue(node.left, h+1); if (node.right != null) nodes.enqueue(node.right, h+1); }