LeetCode 145. 二叉树的后序遍历
题目链接:LeetCode 145. 二叉树的后序遍历
题意:
给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。
解题思路:
- 递归遍历
递归代码如下
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
var res []int
func postorderTraversal(root *TreeNode) []int {
res = []int{}
pt(root)
return res
}
func pt(root *TreeNode){
if root == nil{
return
}
pt(root.Left)
pt(root.Right)
res = append(res,root.Val)
}
- 迭代遍历
如果想要使用和前序、中序相同结构的代码,那么就需要转换一下思路,直接求 左->右->根 的遍历顺序不容易得到,那么我们可以求 根->右->左 的遍历顺序,这个顺序比较容得得到,然后反转一下遍历结果即可。
迭代代码如下
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func postorderTraversal(root *TreeNode) []int {
var res []int //结果数组
var stk []*TreeNode //栈
for root != nil || len(stk)!= 0{
for root != nil { //如果当前节点不空,
res = append(res,root.Val) //遍历当前节点
stk = append(stk,root) //入栈
root = root.Right //遍历右子树
}
root = stk[len(stk)-1] //取出栈顶元素
stk = stk[:len(stk)-1] //出栈
root = root.Left //遍历左子树
}
// 反转结果数组
for i,j:=0,len(res)-1;i<j;i,j=i+1,j-1{
res[i],res[j] = res[j],res[i]
}
return res
}