图解二叉树非递归版的中序遍历算法

本文详细介绍了二叉树的非递归中序遍历算法,通过利用栈的数据结构,实现左子树、根节点、右子树的顺序访问。文章阐述了算法的思路、技巧,并提供了具体的实现代码,最后分析了算法的时间和空间复杂度。
摘要由CSDN通过智能技术生成

你会学到什么?

树的递归遍历算法很容易理解,代码也很精简,但是如果想要从本质上理解二叉树常用的三种遍历方法,还得要思考树的非递归遍历算法。

读完后的收获:

  • 您将学到二叉树的中序遍历的非递归版本
  • 明白栈这种数据结构该怎么使用

讨论的问题是什么?

主要讨论二叉树的非递归版中序遍历该如何实现,包括借助什么样的数据结构,迭代的思路等。

这个问题相关的概念和理论

遍历

Traversal 指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。

二叉树组成

二叉树由根结点及左、右子树这三个基本部分组成。

中序遍历

Inorder Traversal 访问根结点的操作发生在遍历其左、右子树之中间。

非递归版中序遍历算法

这里我们以二叉树为例,讨论二叉树的中序遍历的非递归版实现。

我们先看下二叉树的节点TreeNode的数据结构定义。

节点的数据域的类型定义为泛型 T,含有左、右子树,及一个带有数据域的构造函数。

   public class TreeNode<T>
    {
        public T val { get; set; }

        public TreeNode<T> left { get; set; }
        public TreeNode<T> right { get; set; }

        public TreeNode(T data)
        {
            val = data;
        }
    }

代码思考

中序遍历,首先遍历左子树,根节点,最后右子树,这里的顺序性,我们借助栈 First In Last Out 的数据结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值