Leetcode 144.二叉树的前序遍历

8 阅读1分钟

题目

image.png

26年5月18日(首刷看解DFS)

func preorderTraversal(root *TreeNode) []int {
    if root==nil{
        return []int{}
    }
    result:=[]int{}
    stack:=[]*TreeNode{root}

    for len(stack)>0{
        node:=stack[len(stack)-1]
        stack=stack[:len(stack)-1]
        result=append(result,node.Val)
        if(node.Right!=nil){
            stack=append(stack,node.Right)
        }
        if(node.Left!=nil){
            stack=append(stack,node.Left)
        }
    }
    return result
}

思路

深度优先搜索+栈

栈的特性后进先出,需要先处理左子树,那么右子树就需要先进入栈内,然后再是左子树

还有一个特性是,栈只用处理栈顶的节点,那么循环的条件就是栈内还有元素。

出栈->访问->左右子树入栈