【发布时间】:2021-05-28 15:03:34
【问题描述】:
我对 golang 中的二叉搜索树 (BST) 遍历解决方案的结构感到困惑。例如,当我们想从下面的树中获取 InOrderTraverse 输出时,输出应该是 [1, 2, 5, 5, 10, 15, 22]。
10
/ \
5 15
/ \ \
2 5 22
/
1
我们将首先通过if tree.Left !=nil 检查左树,以便我们可以到达叶节点(在本例中为 1)。由于叶子节点是tree.Left == nil,我们只需将值附加到切片`array = append(array, tree.Value)。
我的困惑是从这里开始的,我们现在站在叶节点1,下一个代码是检查当前节点if tree.Right != nil{是否有正确的节点,因为1是这棵树中的最后一个节点,所以我们只需返回数组,即切片中只存储 1。
到达叶节点 1 后发生了什么,以及如何将节点向后/向上移动,例如从 1 到 2 或 2 到 5。我真的很困惑递归函数是如何工作的......
type BST struct {
Value int
Left *BST
Right *BST
}
func (tree *BST) InOrderTraverse(array []int) []int {
if tree.Left != nil {
array = tree.Left.InOrderTraverse(array)
}
array = append(array, tree.Value)
if tree.Right != nil {
array = tree.Right.InOrderTraverse(array)
}
return array
}
【问题讨论】:
标签: go binary-tree binary-search-tree