代码
func preorderTraversal(root *TreeNode) []int {
ans := []int{}
if root==nil {
return ans
}
tmp := []*TreeNode{root}
var now *TreeNode
for len(tmp)!=0 {
now = tmp[len(tmp)-1]
tmp = tmp[:len(tmp)-1]
ans = append(ans, now.Val)
if now.Right != nil {
tmp = append(tmp, now.Right)
}
if now.Left != nil {
tmp = append(tmp, now.Left)
}
}
return ans
}
思路
性能
- 时间复杂度:O(n)
- 空间复杂度:O(n),需要储存每个元素
代码
func inorderTraversal(root *TreeNode) []int {
ans := []int{}
var dfs func(now *TreeNode)
dfs = func(now *TreeNode) {
if now==nil {
return
}
dfs(now.Left)
ans = append(ans, now.Val)
dfs(now.Right)
}
dfs(root)
return ans
}
思路
性能
- 时间复杂度:O(n)
- 空间复杂度:O(n),需要储存每个元素
代码
func postorderTraversal(root *TreeNode) []int {
ans := []int{}
var dfs func(now *TreeNode)
dfs = func(now *TreeNode) {
if now==nil {
return
}
dfs(now.Left)
dfs(now.Right)
ans = append(ans, now.Val)
}
dfs(root)
return ans
}
思路
性能
- 时间复杂度:O(n)
- 空间复杂度:O(n),需要储存每个元素