[Golang]力扣Leetcode—中级算法—树和图—二叉树的中序遍历(递归、迭代)
[Golang]力扣Leetcode—中级算法—树和图—二叉树的中序遍历(递归、迭代)
题目:给定一个二叉树的根节点 root ,返回它的 中序 遍历。
链接: 力扣Leetcode—中级算法—树和图—二叉树的中序遍历.
示例1 :
输入:root = [1,null,2,3]
输出:[1,3,2]
示例2 :
输入:root = []
输出:[]
示例3 :
输入:root = [1]
输出:[1]
示例4 :
输入:root = [1,2]
输出:[2,1]
示例5 :
输入:root = [1,null,2]
输出:[1,2]
标签:栈、树、深度优先搜索、二叉树
思路:二叉树的中序遍历,按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历我们可以直接用 递归 函数来模拟这一过程。或者我们也可以用 迭代 来解决问题,先将整颗树怼进去,在把所有的左子树怼进去,然后遍历左子树,直接左边的最下边。因为先进后出,拿到了最下面的左节点,也怼到数组里,看以右节点为根的还有没有左节点,有就回到上面第1步,没有就走第3步,把根节点怼进去,在怼右节点。
递归Go代码如下:
package main import "fmt" // 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 } func main() { // 测试用例 root = [1,null,2,3] root := &TreeNode{1, nil, nil} root.Right = &TreeNode{2, nil, nil} root.Right.Left = &TreeNode{3, nil, nil} res := inorderTraversal(root) fmt.Printf("res is: %v\n", res) }
提交截图:
迭代Go代码如下:
package main import "fmt" // TreeNode Definition for a binary tree node. type TreeNode struct { Val int // 根 Left *TreeNode //左节点 Right *TreeNode //右节点 } func inorderTraversal(root *TreeNode) (res []int) { // 定义一个栈,栈存的就是一棵树 var stack []*TreeNode for root != nil || len(stack) > 0 { for root != nil { // 1.先将整颗树怼进去,在把所有的左子树怼进去 stack = append(stack, root) // 2.遍历左子树,直接左边的最下边 root = root.Left } // 3.因为先进后出,拿到了最下面的左节点 root = stack[len(stack)-1] stack = stack[:len(stack)-1] // 4.怼到数组里 res = append(res, root.Val) //5.看以右节点为根的还有没有左节点,有就回到上面第1步,没有就走第3步,把根节点 root = root.Right } return } func main() { // 测试用例 root = [1,null,2,3] root := &TreeNode{1, nil, nil} root.Right = &TreeNode{2, nil, nil} root.Right.Left = &TreeNode{3, nil, nil} res := inorderTraversal(root) fmt.Printf("res is: %v\n", res) }
提交截图:
本文作者:Dancing-Pierre
本文链接:https://www.cnblogs.com/wyc-1009/p/17548146.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步