LeetCode 145. 二叉树的后序遍历

题目链接:LeetCode 145. 二叉树的后序遍历

题意:

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。

解题思路:

  1. 递归遍历

递归代码如下

/**
 * 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)
   
}
  1. 迭代遍历
    如果想要使用和前序、中序相同结构的代码,那么就需要转换一下思路,直接求 左->右->根 的遍历顺序不容易得到,那么我们可以求 根->右->左 的遍历顺序,这个顺序比较容得得到,然后反转一下遍历结果即可。

迭代代码如下

/**
 * 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
}
posted @ 2023-05-15 17:18  小星code  阅读(13)  评论(0)    收藏  举报