二叉树遍历——中序遍历(Golang)
二叉树遍历——中序遍历(Golang)
简介
中序遍历(LDR)是二叉树遍历的一种,也叫做中根遍历、中序周游。
定义
在二叉树中,中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。若二叉树为空则结束返回,否则:(1)中序遍历左子树(2)访问根结点(3)中序遍历右子树
如图所示二叉树,中序遍历结果:DBEAFC
Golang遍历实现
// TreeNode Definition for a binary tree node. type TreeNode struct { Val int // 根 Left *TreeNode //左节点 Right *TreeNode //右节点 } func inorderTraversal(root *TreeNode) (res []int) { var inorder func(node *TreeNode) inorder = func(node *TreeNode) { if node == nil { return // 结束当前递归 } inorder(node.Left) // 直接怼到左边最下边 res = append(res, node.Val) // 添加到数组里 inorder(node.Right) // 看右边还有没有分支,有就继续走,没有就将右节点加入数组 } inorder(root) return }
Golang迭代实现
栈:先进后出
// TreeNode Definition for a binary tree node. type TreeNode struct { Val int // 根 Left *TreeNode //左节点 Right *TreeNode //右节点 } func inorderTraversal(root *TreeNode) (res []int) { stack := []*TreeNode{} // 定义一个栈,栈存的就是一棵树 for root != nil || len(stack) > 0 { for root != nil { stack = append(stack, root) // 1.先将整颗树怼进去,在把所有的左子树怼进去 root = root.Left // 2.遍历左子树,直接左边的最下边 } root = stack[len(stack)-1] // 3.因为先进后出,拿到了最下面的左节点 stack = stack[:len(stack)-1] res = append(res, root.Val) // 4.怼到数组里 //5.看以右节点为根的还有没有左节点,有就回到上面第1步,没有就走第3步,把根节点 root = root.Right // } return }
本文作者:Dancing-Pierre
本文链接:https://www.cnblogs.com/wyc-1009/p/17548148.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步