【发布时间】:2020-01-16 06:59:55
【问题描述】:
我不是在寻找树的最大和路径。我可以创建并找到二叉搜索树的总和,但我需要找到两个叶子之间所有节点的总和。
例如,对于使用这些节点构建的 BST:5、10、13、8、3、4、5,树如下所示:
5
/ \
3 10
\ / \
4 8 13
/
5
所以如果输入是4和13,那么节点的和就是3+5+10=18。
函数可能是这样的:Sum(tree, firstNumber, secondNumber);
我正在考虑创建所有节点的两个有序列表,直到根节点并查看它们中的任何一个是否是公共的,然后将所有唯一节点的值相加。这在时间复杂度和内存管理方面很糟糕,所以我想看看是否有更简单的方法
编辑:M. Hazara 是对的,5 不是一片叶子。所以我删除了那个例子
【问题讨论】:
-
我认为叶子意味着没有孩子的节点...... ????你确定你可以将根定义为叶子???
-
两个步骤:1. 找到最低的共同祖先,2. 使用常规 BST 搜索两者并将遇到的所有节点相加
-
@M.Hazara 你是对的,我更新了示例。
-
@Primusa,所以对每个或同时进行 BST 搜索?
-
每个节点的 BST,并将您看到的每个节点相加。你可能最终会添加两次 LCA,所以最后减去它
标签: c# algorithm tree binary-search-tree