您的位置:首页 > 编程语言 > Go语言

【Leetcode】:144. Binary Tree Preorder Traversal 问题 in Go语言

2016-04-22 17:55 549 查看
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
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  go语言 leetcode Golang