n树遍历,前序、后序、层序
前序遍历
/*** Definition for a Node.* type Node struct {* Val int* Children []*Node* }*///递归func preorder(root *Node) []int {res := []int{}if root == nil {return res}res = append(res,root.Val)for _, node := range root.Children {res = append(res,preorder(node)...)}return res}//迭代func preorder(root *Node) []int {res := []int{}if root == nil {return res}stack := []*Node{root}for len(stack) > 0 {node := stack[len(stack)-1]stack = stack[:len(stack)-1]res = append(res,node.Val)for i:=len(node.Children)-1;i>=0;i-- {stack = append(stack,node.Children[i])}}return res}
后序遍历
/**
* Definition for a Node.
* type Node struct {
* Val int
* Children []*Node
* }
*/
// 递归
func postorder(root *Node) []int {
res := []int{}
if root == nil {
return res
}
for _,node := range root.Children {
res = append(res,postorder(node)...)
}
res = append(res,root.Val)
return res
}
// 迭代
func postorder(root *Node) []int {
res := []int{}
stack :=[]*Node{root}
if root == nil {
return res
}
for len(stack) >0 {
node := stack[len(stack)-1]
stack = stack[:len(stack)-1]
res = append(res,node.Val)
for _, no := range node.Children {
stack = append(stack,no)
}
}
for i:=0;i< len(res)/2;i++ {
res[i],res[len(res)-1-i] = res[len(res)-1-i],res[i]
}
return res
}
层级遍历
/**
* Definition for a Node.
* type Node struct {
* Val int
* Children []*Node
* }
*/
// 递归
var res [][]int
func levelOrder(root *Node) [][]int {
res = make([][]int,0)
if root == nil {
return res
}
dfs(root,0)
return res
}
func dfs(root *Node,level int) {
if root == nil {
return
}
if len(res) == level {
res = append(res,[]int{})
}
res[level] = append(res[level],root.Val)
for _, child := range root.Children {
dfs(child,level+1)
}
}
//迭代
func levelOrder(root *Node) [][]int {
res := [][]int{}
if root == nil {
return res
}
queue := []*Node{}
queue = append(queue,root)
for len(queue) >0 {
length := len(queue)
ress := []int{}
for length >0 {
node := queue[0]
queue = queue[1:]
ress = append(ress,node.Val)
length--
for _,child := range node.Children {
queue = append(queue,child)
}
}
res = append(res,ress)
}
return res
}
