二叉树的递归遍历和非递归遍历

本文介绍了二叉树的三种遍历方式——前序、中序和后序遍历,并分别通过递归和非递归的方式详细阐述了实现过程。递归实现简单直接,非递归实现利用栈来模拟函数调用,提供了一种不同的思考角度。
摘要由CSDN通过智能技术生成

二叉树是一种基本的数据结构,在程序员面试中经常会被考察。其中按一定顺序遍历所有节点是最基本的操作,很多知名的面试题目,例如求二叉树的深度、求出和为某一值的路径等等,本质上都是遍历的变种。本文试图从递归和非递归的角度来考察一下遍历的算法。


【遍历定义】

在二叉树中,每一个节点都有左右两个子节点(子节点可能为空,例如叶子节点)。根据节点和子节点访问的先后顺序,共有三种遍历方式:

  • 前序遍历:先访问根节点,再访问左右子节点
  • 中序遍历:先访问左子节点,再访问根节点,最后访问右子节点
  • 后序遍历:先访问左右子节点,再访问根节点

例如,假定有下面一棵二叉树:


那么各节点遍历的顺序如下:

  • 前序遍历:0,1,3,4,7,8,2,5,6
  • 中序遍历:3,1,7,8,4,0,5,2,6
  • 后序遍历:3,8,7,4,1,5,6,2,0


【递归实现】

用递归实现很简单,代码如下:

# 定义Node实现,用value存储值,并且有left、right两个节点分别指向左右两个子节点
class Node(object):
    def __init__(self, value, left = None, right = None):
        self.value = value
        self.left =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值