二叉树的先中后序递归和非递归遍历(数据结构作业)

本文详细介绍了二叉树的先序、中序和后序遍历的递归和非递归算法。通过具体的设计思想、算法流程图和源代码,阐述了遍历过程。在实施过程中,作者遇到并解决了两个关键问题,包括非递归遍历时节点栈的使用和全局变量带来的线程安全性问题。这个项目不仅加深了作者对二叉树的理解,也锻炼了解决问题和逻辑思维能力。
摘要由CSDN通过智能技术生成

一、设计思想

我创建二叉树是用的先序创建,其中用‘#’代表空节点。

1、递归先序遍历

(1)如果当前节点为空节点(用‘#’代表空节点),结束当前函数

(2)打印当前节点

(2)递归当前节点的左子树

(3)递归当前节点的右子树

2、递归中序遍历

(1)如果当前节点为空节点(用‘#’代表空节点),结束当前函数

(2)递归当前节点的左子树

(3)打印当前节点

(4)递归当前节点的右子树

3、递归后序遍历

(1)如果当前节点为空节点(用‘#’代表空节点),结束当前函数

(2)递归当前节点的左子树

(3)递归当前节点的右子树

(4)打印当前节点

 

4、非递归先序遍历

(1)进入循环,当前节点不为空时:

打印当前节点

当前节点入栈

取当前节点的左子节点为当前节点

(2)弹出栈顶节点,取栈顶节点的右子节点为当前节点

(3)当前节点不为空或节点栈不空时循环执行(1)(2)

5、非递归中序遍历

(1)进入循环,当前节点不为空时:

当前节点入栈

取当前节点的左子节点为当前节点

(2)弹出栈顶节点,打印栈顶节点,取栈顶节点的右子节点为当前节点

(3)当前节点不为空或节点栈不空时循环执行(1)(2)

6、非递归后序遍历

(1)进入循环,当前节点不为空时:

当前节点的访问次数‘visit’赋值0;

当前节点入栈

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值