题目
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
}
思路
深度优先搜索+栈
栈的特性后进先出,需要先处理左子树,那么右子树就需要先进入栈内,然后再是左子树
还有一个特性是,栈只用处理栈顶的节点,那么循环的条件就是栈内还有元素。
出栈->访问->左右子树入栈