Given a binary tree, return the preorder traversal of its nodes' values.
Note: Recursive solution is trivial, could you do it iteratively?------------------------------------------------------------------------------------------------------------------------------------
这道题用递归的方法来做实在是太简单了
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func preorderTraversal(root *TreeNode) []int {
if (root == nil) {
return nil
}
traver := []int{root.Val}
l := preorderTraversal(root.Left)
r := preorderTraversal(root.Right)
traver = append(traver, l...)
traver = append(traver, r...)
return traver
}
但是题目不让用递归,那么就用循环迭代来做吧,代码中运用到了栈,把一个一个的节点压入栈中来实现先序遍历
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
import("container/list")
func preorderTraversal(root *TreeNode) []int {
if root == nil {
return nil
}
traver := []int{}
stack := list.New()
stack.PushBack(root)
for {
e := stack.Back()
if e == nil {
break
}
stack.Remove(e)
node, _ := e.Value.(*TreeNode)
traver = append(traver, node.Val)
if node.Right != nil {
stack.PushBack(node.Right)
}
if node.Left != nil {
stack.PushBack(node.Left)
}
}
return traver
}