二叉树的遍历{迭代实现}

二叉树的遍历#

前序遍历#

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func preorderTraversal(root *TreeNode) []int {
    var stack []*TreeNode
    var res []int
    stack=append(stack,root)
    for len(stack)!=0{
        node:=stack[len(stack)-1]
        stack=stack[:len(stack)-1]
        if node!=nil{
           res=append(res,node.Val) 
        }else{
            continue
        }
        stack=append(stack,node.Right)
        stack=append(stack,node.Left)
    }
    return res
}

后序遍历#

func postorderTraversal(root *TreeNode) []int {
    var stack []*TreeNode
    var res []int
    stack=append(stack,root)
    for len(stack)!=0{
        node:=stack[len(stack)-1]
        stack=stack[:len(stack)-1]
        if node!=nil{
           res=append(res,node.Val) 
        }else{
            continue
        }
        stack=append(stack,node.Left)
        stack=append(stack,node.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
    }
}

中序遍历#

func inorderTraversal(root *TreeNode) []int {
    var res []int
    var stack []*TreeNode
    cur:=root
    for len(stack)!=0||cur!=nil{
        if cur!=nil{
            stack=append(stack,cur)
            cur=cur.Left
        }else{
            cur=stack[len(stack)-1]
            stack=stack[:len(stack)-1]
            res=append(res,cur.Val)
            cur=cur.Right
        }
    }
    return res
}

 

作者:suehoo

出处:https://www.cnblogs.com/suehoo/p/17029758.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   suehoo  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu