首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Golang中实现二叉树的中序遍历

在Golang中实现二叉树的中序遍历可以通过递归或者非递归的方式来实现。下面给出两种实现方式的代码示例:

  1. 递归方式实现中序遍历:
代码语言:txt
复制
package main

import "fmt"

type TreeNode struct {
    Val   int
    Left  *TreeNode
    Right *TreeNode
}

func inorderTraversal(root *TreeNode) []int {
    var result []int
    inorder(root, &result)
    return result
}

func inorder(node *TreeNode, result *[]int) {
    if node == nil {
        return
    }
    inorder(node.Left, result)
    *result = append(*result, node.Val)
    inorder(node.Right, result)
}

func main() {
    // 构建二叉树
    root := &TreeNode{Val: 1}
    root.Left = &TreeNode{Val: 2}
    root.Right = &TreeNode{Val: 3}
    root.Left.Left = &TreeNode{Val: 4}
    root.Left.Right = &TreeNode{Val: 5}

    // 中序遍历二叉树
    result := inorderTraversal(root)
    fmt.Println(result) // 输出 [4 2 5 1 3]
}
  1. 非递归方式实现中序遍历(借助栈):
代码语言:txt
复制
package main

import (
    "fmt"
)

type TreeNode struct {
    Val   int
    Left  *TreeNode
    Right *TreeNode
}

func inorderTraversal(root *TreeNode) []int {
    var result []int
    stack := []*TreeNode{}
    node := root
    for node != nil || len(stack) != 0 {
        for node != nil {
            stack = append(stack, node)
            node = node.Left
        }
        node = stack[len(stack)-1]
        stack = stack[:len(stack)-1]
        result = append(result, node.Val)
        node = node.Right
    }
    return result
}

func main() {
    // 构建二叉树
    root := &TreeNode{Val: 1}
    root.Left = &TreeNode{Val: 2}
    root.Right = &TreeNode{Val: 3}
    root.Left.Left = &TreeNode{Val: 4}
    root.Left.Right = &TreeNode{Val: 5}

    // 中序遍历二叉树
    result := inorderTraversal(root)
    fmt.Println(result) // 输出 [4 2 5 1 3]
}

以上是在Golang中实现二叉树的中序遍历的两种方法。这两种方法都可以实现二叉树的中序遍历,递归方式更简洁易懂,而非递归方式则可以减少函数调用的开销。具体选择哪种方法取决于实际需求和个人喜好。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

二叉树遍历 遍历 后序遍历遍历

对于深度为K,有n个结点二叉树,当且仅当其每一个结点都与深度为K二叉树编号从1至n结点一一对应时称之为完全二叉树。 要注意是满二叉树是一种特殊完全二叉树。...也就是说,如果一个二叉树层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树 二叉树遍历遍历 :先遍历根节点,再遍历左节点,最后遍历右节点 遍历 :先遍历左节点,再遍历根节点,最后遍历右节点...后序遍历 :先遍历左节点,再遍历右节点,最后遍历根节点 层遍历 : 自上而下,自左至右逐层访问树结点过程就是层遍历 遍历方法实现 先建立一棵树 用代码建立以上树 class Node...= null){ queue.offer(cur.right); } } } (层遍历无法使用递归方法) 补充(非递归实现...= null){ stack.push(top.left); } } } // 二叉树遍历,非递归迭代实现

1.1K20
  • 二叉树遍历遍历、后序遍历

    1 问题 Python中二叉树遍历遍历、后序遍历。 2 方法 先遍历递归算法定义: 若二叉树非空,则依次执行如下操作: ⑴ 访问根结点; ⑵ 遍历左子树; ⑶ 遍历右子树。...遍历递归算法定义: 若二叉树非空,则依次执行如下操作: ⑴ 遍历左子树; ⑵ 访问根结点; ⑶ 遍历右子树。...后序遍历递归算法定义: 若二叉树非空,则依次执行如下操作: ⑴ 遍历左子树;⑵ 遍历右子树;⑶ 访问根结点。...self.right = right def __str__(self): return str(self.data) class MyTree(): '二叉树实现...(btree.base) 3 结语 我们针对Python中二叉树遍历遍历、后序遍历问题,运用书上相应基础知识,通过代码运行成功证明该方法是有效二叉树遍历应用非常广泛,希望通过未来学习我们能写出更多长

    17510

    二叉树遍历_二叉树序列

    大家好,又见面了,我是你们朋友全栈君。 二叉树是一种重要数据结构,对二叉树遍历也很重要。这里简单介绍三种二叉树遍历方法。...二叉树遍历就是首先遍历左子树,然后访问当前节点,最后遍历右子树。...对于下面的二叉树遍历结果如下: 结果:[5,10,6,15,2] 直观来看,二叉树遍历就是将节点投影到一条水平坐标上。如图: 1、递归法 这是思路最简单方法,容易想到并且容易实现。...从根节点开始找二叉树最左节点,将走过节点保存在一个栈,找到最左节点后访问,对于每个节点来说,它都是以自己为根子树根节点,访问完之后就可以转到右儿子上了。...发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    26010

    二叉树遍历:先后序遍历递归与非递归实现及层遍历

    遍历,后序遍历,层遍历四种方式,下面一一介绍。   ...先遍历   在先遍历,对节点访问工作是在它左右儿子被访问之前进行。换言之,先遍历访问节点顺序是根节点-左儿子-右儿子。...遍历   遍历遍历路径与先遍历完全一样。其实现思路也与先遍历非常相似。...后序遍历   后序遍历遍历,先遍历路径也完全一样。主要不同点是后序遍历访问节点顺序是先访问左儿子和右儿子,最后访问节点,即左儿子-右儿子-根节点。   ...这种遍历方式结果是将二叉树从上到下,从左至右一层一层遍历,即层遍历,代码实现如下: void LevelOrderTraversal(BinTree BT) { BinTree T;

    1.5K60

    二叉树前序遍历遍历、后序遍历、层遍历直观理解

    由于先遍历左子树和先遍历右子树在算法设计上没有本质区别,所以,只讨论三种方式: DLR–前序遍历(根在前,从左往右,一棵树根永远在左子树前面,左子树又永远在右子树前面 ) LDR–遍历(根在,从左往右...二叉树结点先根序列、根序列和后根序列,所有叶子结点先后顺序一样 建议看看文末第3个参考有趣详细推导 前序遍历(DLR)...遍历(LDR) 后序遍历(LRD) 2....算法上后序实现 除了下面的递归实现,还有一种使用栈非递归实现。...层遍历遍历嘛,就是按层,从上到下,从左到右遍历,这个没啥好说。 参考 1.

    2.1K40

    二叉树遍历

    二叉树是一种排序基本数据结构,而如果要想为多个对象进行排序,那么就必须可以区分出对象大小,那么就必须依靠Comparable接口完成。...二叉树基本原理:取第一个元素作为根节点,之后每一个元素排列要求:如果比根节点小数据放在左子树,如果比根节点大数据放在右子树,在输出时候采用遍历(左-根-右)方式完成。...但是,不管是何种方式操作,一定要记住,这种数据结构实现永远都需要依靠节点类,而这个时候节点类要保存两个子节点:左、右。...class BinaryTree{ class Node{ // 声明一个节点类 private Comparable data ; // 保存具体内容 private Node left...}else{ this.right.addNode(newNode) ; // 继续向下判断 } } } public void printNode(){ // 输出时候采用遍历

    44100

    二叉树进行遍历结果_层次遍历遍历构建二叉树

    目录 1.二叉树 2.二叉排序树(搜索树) ---- 1.二叉树 方法:在二叉树下画一条线作为X轴,把所有节点投影到X轴上,从左到右排列好,得到结果就是遍历结果。...例如: 得到“HDIBEAFJCG”是遍历结果。 在面试或者考试时候,用上这个小技巧又快又不会出错,绝对是不二选择。...如果想用代码实现,可以参考这篇文章,二叉树遍历(递归+非递归)Java,其中详细介绍了遍历实现方法和结果,包括递归和非递归两种方式。...例如: 得到“10 20 40 50 55 60 62 69 75 80”是遍历结果。 比如要删除20这个节点,那么就是用10或者40这两个节点中一个替换20。...发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    38160

    1 二叉树遍历

    本文涉及知识点  二叉树基本概念 栈运用 二叉树基本概念和栈相关概念前面已经介绍,忘记了小伙伴复习后再看效果一定翻倍哟! 二叉树知识复习:[今天给二叉树加个BGM,二叉树唱歌了!]...栈知识复习:[leetcode栈队列]1 栈实现队列 1 Leetcode94 二叉树遍历 给定一个二叉树,返回它 遍历。...01 题目解析 思路 基本思路 对于一颗二叉树,我们能拿到根节点root指针,首先访问是根节点。...如果为NULL,弹出栈顶元素并将此元素右节点放入栈,重复此步骤。如上图D没有左右节点,此时弹出栈顶D,B,此时B存在右节点则入栈如下图。 ?...02 动画演示 小蓝希望大家能够开开心心学习,并能得到好offer!也可以分享给身边朋友或者文末点个在看哟。 03 代码实现 1 c++版本 ? 2 python版本 ? 3 java版本 ?

    37710

    二叉树、后序遍历【重点】

    二叉树操作:   一. 已知两种遍历序列求原始二叉树   二. 遍历:     1....先遍历(先访问根节点)       先访问根节点       再先访问左子树       再先访问右子树 ?     访问左子树步骤:       1. 从根节点A开始       2....返回到A     即左子树遍历为A-B-D     访问右子树:       操作与上相同,最后A右子树访问完毕,意味着整棵树访问完毕     最终遍历结果是:A-B-D-C-E-F-G     2....遍历(中间访问根节点)       先遍历左子树       再访问根节点       再遍历右子树 ? 操作: 1. 从根节点A左子树(以B为根节点)开始 2....访问A右子树(以F为根节点)……操作同上 最终结果:B-D-C-E-A-L-F-N-Q-M     3. 后序遍历(最后访问根节点) 先遍历左子树 再遍历右子树 再访问根节点 ? 操作: 1.

    47310

    二叉树---(3)前序遍历遍历,后序遍历

    很多朋友在刚开始接触二叉树时,对前序遍历遍历,后序遍历这三个遍历方式不太了解,很多博客,上来就是实现方式,并没有清晰阐述这三种遍历步骤和顺序,这里记录一下。        ...所谓遍历(Traversal)是指沿着某条搜索路线,依次对树每个结点均做一次且仅做一次访问。访问结点所做操作依赖于具体应用问 题。...遍历二叉树上最重要运算之一,是二叉树上进行其它运算之基础。         按照根节点位置不同分为前序遍历遍历,后序遍历。...前序遍历:根节点->左子树->右子树 遍历:左子树->根节点->右子树 后序遍历:左子树->右子树->根节点 注意:在做前序遍历时,左右子树也是按照前序遍历顺序, 同理,在做遍历时,左右子树也是按照遍历顺序...例1:求下面树三种遍历 ? 前序遍历:abdefgc 遍历:debgfac 后序遍历:edgfbca 例2:求下面树三种遍历 ?

    67720

    递归和迭代实现二叉树、后序和层遍历

    下面用栈,类比递归方法来统一实现三种遍历方式: 2.1 先遍历 class Solution { public List preorderTraversal(TreeNode...其实后序遍历,可以利用前序遍历遍历右子树,形成 根->右子树->左子树 和后序完全相反顺序,然后再将该顺序逆序,最后得到后序遍历顺序。...利用队列来实现遍历 基本思想是: 入队就出队,并判断是否有子节点,使用当前队列元素作为限制条件 有则入队,没有下一步 当所有子节点为空,且全部节点出队后循环结束,输出队列 class Solution...这是由二叉树结构所决定,每个节点都有指向孩子节点指针,但是没有指向父节点指针,所以需要利用栈来实现子节点回到父节点效果。...Morris 算法进行二叉树遍历

    22540

    二叉树,,后序遍历序列_二叉树遍历和后序遍历正好相反

    二叉树遍历主要有三种: (1)先(根)遍历(根左右) (2)(根)遍历(左根右) (3)后(根)遍历(左右根) 举个例子: 先(根)遍历(根左右):A B D H E I C F J K...此外,还有一个命题:给定了二叉树任何一种遍历序列,都无法唯一确定相应二叉树。但是如果知道了二叉树遍历序列和任意另一种遍历序列,就可以唯一地确定二叉树。...例子1:已知二叉树后序遍历序列是dabec,遍历序列是debac,它前序遍历序列是(cedba)。...b左子树: (3)先遍历:dg 遍历:dg 由先遍历序列可知d为b左子树根结点。 遍历序列根结点在中间,其左边是左子树,右边是右子树。...发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    55420

    【算法】二叉树,后序,层级遍历

    ,后序递归版本 对于二叉树,后序遍历,其递归版本都非常相似,唯一区别就是打印时机。...,后序非递归版本 先遍历 为了实现非递归,我们需要通过栈来辅助,模拟栈操作。...由于先遍历顺序是,先,再左,再右。那么我们对于每一个节点,先打印其节点,然后压入右子树,再压入左子树,就可以实现,再左,再右顺序。...但最简单方法是通过两个栈方式,我们知道后序遍历顺序是 左右,那么我们先实现一个改进遍历,其顺序是 右左,然后将打印操作改为入栈操作。...待以右左打印节点全部入栈后,一一出栈,就实现了 左右后序遍历了。

    74610
    领券