在你提供的代码中,有一个错误在以下两行:
if head.node.Right != nil {
queue = append(queue, Frame{head.node.Left, head.level})
}
应该改为:
if head.node.Left != nil {
queue = append(queue, Frame{head.node.Left, head.level+1})
}
因为在处理左子节点时,应该将level加1,表示当前层级的下一层。
同样地,在下面这行:
if head.node.Right != nil {
queue = append(queue, Frame{head.node.Right, head.level})
}
应该改为:
if head.node.Right != nil {
queue = append(queue, Frame{head.node.Right, head.level+1})
}
同样的原因,处理右子节点时也需要将level加1。
修正后的代码如下:
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
type Frame struct {
node *TreeNode
level int
}
func rightSideView(root *TreeNode) []int {
result := make([]int, 0)
if root == nil {
return result
}
queue := make([]Frame, 0)
queue = append(queue, Frame{root, 0})
for len(queue) != 0 {
head := queue[0]
queue = queue[1:]
if len(result) <= head.level {
result = append(result, head.node.Val)
}
if head.node.Left != nil {
queue = append(queue, Frame{head.node.Left, head.level+1})
}
if head.node.Right != nil {
queue = append(queue, Frame{head.node.Right, head.level+1})
}
}
return result
}
修正后的代码会正确地进行二叉树右视图的遍历。
内容由零声教学AI助手提供,问题来源于学员提问