我正在尝试找到一种方法来输出在路径中找到的最左节点的数量。 例如:
此二叉搜索树中的最大节点数为2(从5-> 3-> 1开始,不包括根)。
解决此问题的最佳方法是什么?
我已经看到了这个线程,它与我试图实现的线程非常相似。
Count number of left nodes in BST
但是我不理解的代码中只有一行。
count += countLeftNodes(overallRoot.left, count++);
overallRoot.left
我的猜测是它在对象上调用了一个函数,但是我无法弄清楚该函数中包含什么以及返回什么。
对这两个问题的任何回答将不胜感激。
答案 0 :(得分:2)
您链接的答案显示了如何遍历树,但是您需要一种不同的算法来获取计数,因为正如您已经指出的那样,该问题正在尝试解决稍有不同的问题。
在遍历的任何给定点,您将拥有当前的剩余计数:它将作为第二个参数向下传递到树上, col1 col2 col3
0 a False a
1 b False a
2 c True a
3 d False c
4 e True c
5 f False e
。该值从根部的零开始,并在您进入节点的左子节点时增加一,但在进入右节点时被设置为零。
然后对于左右遍历,将左计数设置为其当前值中的较大者,然后从递归调用返回到countLeftNodes()
。然后,这个最终值就是您从countLeftNodes()
返回的值
答案 1 :(得分:2)
以下是@dgnuff算法的镜头:
void maxLeftNodesInPath(Node *root, int count, int *best) {
if (root) {
maxLeftNodesInPath(root->left, ++count, best);
maxLeftNodesInPath(root->right, 0, best);
}
else if (count > *best) {
*best = count - 1;
}
}
解释几乎相同:向左移动时不断积累计数,向右移动时重置,如果有叶子,则更新最佳。
这里是repl。