题目:
给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。
n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。
算法:
方法一:递归解法
func preorder(root *Node) []int {
ans := make([]int, 0)
var dfs func(node *Node)
dfs = func(node *Node) {
if node == nil {
return
}
ans = append(ans, node.Val)
for i := range node.Children {
if node.Children[i] != nil {
dfs(node.Children[i])
}
}
}
dfs(root)
return ans
}
方法一:迭代解法
迭代本质上是用stack模拟了递归的过程。
func preorder(root *Node) []int {
if root == nil {
return nil
}
ans := make([]int, 0)
stack := []*Node{root}
for len(stack) != 0 {
n := len(stack)
node := stack[n - 1]
stack = stack[:n - 1]
ans = append(ans, node.Val)
for i := len(node.Children) - 1; i >= 0; i -- {
if node.Children[i] != nil {
stack = append(stack, node.Children[i])
}
}
}
return ans
}