给定一个二叉树,返回它的前序遍历。
示例:
输入: [1,null,2,3]
1
2
/
3
输出: [1,2,3]
有两种通用的遍历树的策略:
- 深度优先搜索(DFS)
在这个策略中,我们采用深度作为优先级,以便从跟开始一直到达某个确定的叶子,然后再返回根到达另一个分支。
深度优先搜索策略又可以根据根节点、左孩子和右孩子的相对顺序被细分为前序遍历,中序遍历和后序遍历。
- 宽度优先搜索(BFS)
我们按照高度顺序一层一层的访问整棵树,高层次的节点将会比低层次的节点先被访问到。
下图中的顶点按照访问的顺序编号,按照 1-2-3-4-5 的顺序来比较不同的策略。
本问题就是用宽度优先搜索遍历来划分层次:[[1], [2, 3], [4, 5]]。
下面使用递归的方法实现
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func preorderRecursive(root *TreeNode) []int {
if root == nil {
return []int{}
}
rest := append([]int{root.Val}, preorderRecursive(root.Left)...)
rest = append(rest, preorderRecursive(root.Right)...)
return rest
}
func preorderTraversal(root *TreeNode)[]int{
if root == nil{
return []int{}
}
re := preorderRecursive(root)
return re
}