private int Depth(TreeNode node)
{
if (node == null)
{
return -1;
}
else
{
return 1 + Math.Max(Depth(node.LeftNode),Depth(node.RightNode));
}
}
我写了一个方法来找到最深的节点,但是我不确定这个方法是否正确。
这是找到最深节点的正确方式吗?
private int Depth(TreeNode node)
{
if (node == null)
{
return -1;
}
else
{
return 1 + Math.Max(Depth(node.LeftNode),Depth(node.RightNode));
}
}
我写了一个方法来找到最深的节点,但是我不确定这个方法是否正确。
这是找到最深节点的正确方式吗?
node == null
),您将得到深度为-1。1 + max(-1, -1) = 0
关于问题的解决,返回0
应该能解决问题,但这个思路是可行的。
至于优化......如果您只知道这棵树是二叉树,那么在不缓存节点高度的情况下,这是您能得到的最好结果。
至于寻找最近的叶子节点,您可以使用BFS算法来高效完成,因为它将以水平方式遍历和发现节点,然后在发现第一个叶子节点时停止。
BFS伪代码:
nodes.enqueue( tuple(node, 1)) //将高度为1的节点排队 while(nodes.count > 0) { (node, h) = nodes.dequeue() if (node.left == null && node.right == null) return h; //如果我们发现的是第一个叶子节点,则返回其高度。
//将所有孩子节点和它们的高度入队 if (node.left != null) nodes.enqueue(node.left, h+1); if (node.right != null) nodes.enqueue(node.right, h+1); }