589.N 叉树的前序遍历

43 阅读1分钟

题目:
给定一个 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
}