144. 二叉树的前序遍历
简单
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
示例 1:
[图片]
输入:root = [1,null,2,3]
输出:[1,2,3]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
示例 4:
[图片]
输入:root = [1,2]
输出:[1,2]
示例 5:
[图片]
输入:root = [1,null,2]
输出:[1,2]
提示:
- 树中节点数目在范围 [0, 100] 内
- -100 <= Node.val <= 100
进阶:递归算法很简单,你可以通过迭代算法完成吗?
递归代码
package __tree
//Definition for a binary tree node.
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func preorderTraversal(root *TreeNode) []int {
//前序:根左右
res := make([]int, 0)
if root == nil {
return res
}
res = append(res, root.Val)
res = append(res, preorderTraversal(root.Left)...)
res = append(res, preorderTraversal(root.Right)...)
return res
}
145. 二叉树的后序遍历
已解答
简单
相关标签
相关企业
给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。
示例 1:
[图片]
输入:root = [1,null,2,3]
输出:[3,2,1]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
提示:
- 树中节点的数目在范围 [0, 100] 内
- -100 <= Node.val <= 100
进阶:递归算法很简单,你可以通过迭代算法完成吗?
迭代代码
func postorderTraversal(root *TreeNode) []int {
//迭代方法,使用栈实现后序:左右根
stack, res := make([]*TreeNode, 0), make([]int, 0)
stack = append(stack, root)
for len(stack) > 0 {
x := stack[len(stack)-1]
stack = stack[:len(stack)-1]
if x != nil {
res = append(res, x.Val)
stack = append(stack, x.Left, x.Right)
}
}
reverse(res)
return res
}
func reverse(a []int) {
l, r := 0, len(a)-1
for l < r {
a[l], a[r] = a[r], a[l]
l, r = l+1, r-1
}
}