funcpreorderTraversal(root *TreeNode)[]int{var ret []intif root ==nil{return ret
}
dequeue :=[]*TreeNode{root}forlen(dequeue)!=0{
n :=len(dequeue)
node := dequeue[n-1]if node !=nil{
dequeue = dequeue[:n-1]if node.Right !=nil{
dequeue =append(dequeue, node.Right)// 右}if node.Left !=nil{
dequeue =append(dequeue, node.Left)// 左}
dequeue =append(dequeue, node)// 中
dequeue =append(dequeue,nil)}else{
node = dequeue[n-2]
dequeue = dequeue[:n-2]
ret =append(ret, node.Val)}}return ret
}
中序遍历
funcpreorderTraversal(root *TreeNode)[]int{var ret []intif root ==nil{return ret
}
dequeue :=[]*TreeNode{root}forlen(dequeue)!=0{
n :=len(dequeue)
node := dequeue[n-1]if node !=nil{
dequeue = dequeue[:n-1]if node.Right !=nil{
dequeue =append(dequeue, node.Right)// 右}
dequeue =append(dequeue, node)// 中
dequeue =append(dequeue,nil)if node.Left !=nil{
dequeue =append(dequeue, node.Left)// 左}}else{
node = dequeue[n-2]
dequeue = dequeue[:n-2]
ret =append(ret, node.Val)}}return ret
}
后序遍历
funcpreorderTraversal(root *TreeNode)[]int{var ret []intif root ==nil{return ret
}
dequeue :=[]*TreeNode{root}forlen(dequeue)!=0{
n :=len(dequeue)
node := dequeue[n-1]if node !=nil{
dequeue = dequeue[:n-1]
dequeue =append(dequeue, node)// 中
dequeue =append(dequeue,nil)if node.Right !=nil{
dequeue =append(dequeue, node.Right)// 右}if node.Left !=nil{
dequeue =append(dequeue, node.Left)// 左}}else{
node = dequeue[n-2]
dequeue = dequeue[:n-2]
ret =append(ret, node.Val)}}return ret
}
递归
前序遍历
funcpreorderTraversal(root *TreeNode)[]int{var ret []intreturnpreOrder(root,ret)}funcpreOrder(root *TreeNode, ret []int)[]int{if root ==nil{return ret
}
ret =append(ret,root.Val)
ret =preOrder(root.Left,ret)
ret =preOrder(root.Right,ret)return ret
}