【发布时间】:2021-10-25 23:42:38
【问题描述】:
我在 python 中编写了中序遍历,效果很好。
def inOrderTraverse(tree, array):
if tree is None:
return None
inOrderTraverse(tree.left,array)
array.append(tree.value)
inOrderTraverse(tree.right,array)
return array
但是,当我尝试使用 GOlang 应用相同的逻辑时,它不起作用。
type BST struct {
Value int
Left *BST
Right *BST
}
func (tree *BST) InOrderTraverse(array []int) []int {
if tree == nil {
return nil
}
(tree.Left).InOrderTraverse(array)
array = append(array,tree.Value)
(tree.Right).InOrderTraverse(array)
return array
}
为了解决这个问题,我编写了 if 语句来防止函数在 tree.Left 为 nil 时被调用。但是我仍然很困惑为什么我的原始代码不起作用。
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
}
总而言之,我正在尝试使用与 python 相同的推理在 Go 中编写中序遍历,但它不起作用。我想出了如何让它工作(第三个代码块),但是我仍然不明白为什么第二个代码块不起作用。似乎在 Nil 指针上调用函数会导致错误
【问题讨论】:
标签: go pointers binary-tree