Loading

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

二叉树的遍历

前序遍历

/**
 * 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
}

 
posted @ 2023-01-06 10:40  suehoo  阅读(35)  评论(0)    收藏  举报