题目概述
- 算法说明
从上往下打印出二叉树的每个节点,同层节点从左至右打印。 - 测试用例
输入:
{5,4,#,3,#,2,#,1}
输出:
[5,4,3,2,1]
解析&参考答案
- 解析
从root节点开始,依次将节点放在一个list中,每次取出list的头元素,并将头元素的左右节点追加到list中;依次循环,直到list中无数据为止。 - 参考答案
vim jz22.go
package main
import "fmt"
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func PrintFromTopToBottom(root *TreeNode) []int {
if root == nil {
return []int{}
}
var result []int
nodeList := []*TreeNode{root}
for len(nodeList) > 0 {
head := nodeList[0]
result = append(result, head.Val)
nodeList = nodeList[1:]
if head.Left != nil {
nodeList = append(nodeList, head.Left)
}
if head.Right != nil {
nodeList = append(nodeList, head.Right)
}
}
return result
}
func main() {
root := &TreeNode{5, &TreeNode{4, &TreeNode{3, &TreeNode{2, &TreeNode{1, nil, nil}, nil}, nil}, nil},
nil}
ret := PrintFromTopToBottom(root)
fmt.Println(ret)
}
注意事项
- to add
说明
- 当前使用 go1.15.8
- 参考 牛客网--剑指offer
标题中jzn(n为具体数字)代表牛客网剑指offer系列第n号题目,例如 jz01 代表牛客网剑指offer中01号题目。
注意!!!
- 笔者最近在学习 golang,因此趁机通过数据结构和算法来进一步熟悉下go语言
- 当前算法主要来源于剑指 offer,后续会进一步补充 LeetCode 上重要算法,以及一些经典算法
- 此处答案仅为参考,不一定是最优解,欢迎感兴趣的读者在评论区提供更优解