描述
给定一个二叉树,返回它的中序遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,2]
进阶:递归算法很简单,你可以通过迭代算法完成吗?
思路
利用栈的先进后出特性实现中序遍历
实现
func inorderTraversal(root *TreeNode) []int {
valueList := make([]int, 0)
stack := make([]*TreeNode, 0)
curNode := root
for curNode != nil || len(stack) > 0{
for curNode != nil{
stack = append(stack, curNode)
curNode = curNode.Left
}
top := stack[len(stack) - 1]
stack = stack[0: len(stack) - 1]
valueList = append(valueList, top.Val)
curNode = top.Right
}
return valueList
}
func inorderTraversal(root *TreeNode) []int{
valueList := make([]int, 0)
if root == nil {
return valueList
}
MidTraversal(root.Left)
valueList = append(valueList, root.Val)
MidTraversal(root.Right)
return valueList
}