给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
与 刷题---树篇---94. 二叉树的中序遍历 类似的题
同样的思路
go 非递归:
func preorderTraversal(root *TreeNode) []int {
res := make([]int,0)
if root == nil {
return res
}
stack := make([]*TreeNode,0)
curr := root
for curr != nil || len(stack) != 0 {
for curr != nil {
res = append(res,curr.Val)
stack = append(stack,curr)
curr = curr.Left
}
curr = stack[len(stack)-1]
stack = stack[:len(stack)-1]
curr = curr.Right
}
return res
}
方法二:
func preorderTraversal(root *TreeNode) []int {
stack := make([]*TreeNode,0)
res := make([]int,0)
if root == nil {
return res
}
push(&stack,root)
for len(stack) != 0 {
root,stack = pop(stack)
res = append(res,root.Val)
if root.Right != nil {
push(&stack,root.Right)
}
if root.Left != nil {
push(&stack,root.Left)
}
}
return res
}
func push(stack *[]*TreeNode,t *TreeNode) {
*stack = append(*stack,t)
}
func pop(stack []*TreeNode) (*TreeNode,[]*TreeNode) {
t := stack[len(stack)-1]
stack = stack[:len(stack)-1]
return t,stack
}