94.二叉树的中序遍历

 

tips: 

               中
              /  \
             左   右

前序遍历:中,左,右
中序遍历:左,中,右
后序遍历:左,右,中

本题需要中序遍历。

栈是一种 先进后出的结构,出栈顺序为左,中,右
那么入栈顺序必须调整为倒序,也就是右,中,左

同理,如果是前序遍历,入栈顺序为 右,左,中;后序遍历,入栈顺序中,右,左,

如果是前序遍历,入栈顺序为右,中,左,出栈顺序为左,中,右

DFS:深度优先搜索

法一:迭代

 解题思路:

func main(){
    root:=createTree(0,[]int{1,2,3,4,5,6})
	ans9:=inorderTraversal1(root)
	fmt.Println(ans9)
}

//用数组按层序建立二叉树
func createTree(index int,nums []int) *TreeNode {
	if index >= len(nums) {
		return nil
	}
	root := &TreeNode{
		Val: nums[index],
	}
	root.Left = createTree(index*2+1, nums)
	root.Right = createTree(index*2+2, nums)
	return root
}
//二叉树的中序遍历
func inorderTraversal1(root *TreeNode)[]int{
	res:=[]int{}
	stack:=[]*TreeNode{}
	for root != nil{
		stack=append(stack,root)
		root=root.Left
	}
	for len(stack)!=0{
		node:=stack[len(stack)-1]
		stack=stack[:len(stack)-1]
		res=append(res,node.Val)
		node=node.Right
		for node!=nil{
			stack=append(stack,node)
			node=node.Left
		}
	}
	return res
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值