- 3
- 0
- 约6.1千字
- 约 10页
- 2017-10-03 发布于重庆
- 举报
递归和非递归先中后遍历二叉树
一、设计思想
在本次试验中,主要用两种方法遍历树,一种是递归方法遍历树,另一种是用非递归方法来遍历树。
递归遍历树:
先序遍历二叉树,若二叉树为空,则空操作否则执行,首先,访问根节点,然后先序遍历根结点的左子树,最后先序遍历根节点的右子树。
中序遍历二叉树,若二叉树为空,则空操作否则执行,首先,中序遍历根节点的左子树,然后访问根节点,最后中序遍历根节点的右子树。
后序遍历二叉树,若二叉树为空,则空操作否则执行,首先后序遍历根节点的左子树,然后后序遍历根节点的右子树,最后访问根节点。
非递归遍历:
先序遍历二叉树:①初始化一个栈,存放二叉结点指针。②t(为二叉树结点指针)当t不为空或者栈不为空,重复执行:输出t的数据,并将t入栈,t=t-lchild(循环直到遍历完当前子树的根结点和其左孩子)。③如果栈不为空,弹出栈顶并赋给t,,t=t-rchild。转步骤②。④若栈空,遍历结束。
中序遍历二叉树:①初始化一个栈,用来存放二叉结点指针。②t(为二叉结点指针)当t不为空或者栈不空时,重复执行③④。③当t不为空时,反复执行:将t入栈,t=t-lchild(子树根结点全部入栈)。④t为空但栈不为空,弹栈并赋给t,将t的数据输出,t=t-rchild。
后序遍历二叉树:①初始化一个栈(存放二叉结点)和一个数组(存放标志:进入右子树的标志),栈和数组的下标都为栈指针的值。②当t(为二叉结点指针)当t不为空或者栈不空时,重复执行③④⑤⑥。③当t不为空,反复执行:栈顶指针top加1,t入栈,数组赋值为0,t=t-lchild。④当(s.top-1)(s.tag[s.top]==1)成立时,反复执行:弹栈顶元素,赋给t,输出t的数据值,栈顶指针要减1。⑤如果栈不空,弹栈顶元素,赋给t,将数组下标为栈顶指针的元素的值设为1,t=t-rchild。⑥如果③④⑤都不成立时,将t赋值为空。
二、算法流程图
先序递归遍历:若二叉树为空,则空操作否则执行,首先,访问根节点,然后先序遍历根结点的左子树,最后先序遍历根节点的右子树。
图1递归先序遍历二叉树算法流程图
后序递归遍历:若二叉树为空,则空操作否则执行,首先后序遍历根节点的左子树,然后后序遍历根节点的右子树,最后访问根节点。
图2递归后序遍历二叉树算法流程图
先序非递归遍历:②t(为二叉树结点指针)当t不为空或者栈不为空,重复执行:输出t的数据,并将t入栈,t=t-lchild(循环直到遍历完当前子树的根结点和其左孩子)。③如果栈不为空,弹出栈顶并赋给t,,t=t-rchild。转步骤②。④若栈空,遍历结束。
图3非递归先序遍历二叉树算法流程图
后序非递归遍历:①初始化一个栈(存放二叉结点)和一个数组(存放标志:进入右子树的标志),栈和数组的下标都为栈指针的值。②当t(为二叉结点指针)当t不为空或者栈不空时,重复执行③④⑤⑥。③当t不为空,反复执行:栈顶指针top加1,t入栈,数组赋值为0,t=t-lchild。④当(s.top-1)(s.tag[s.top]==1)成立时,反复执行:弹栈顶元素,赋给t,输出t的数据值,栈顶指针要减1。⑤如果栈不空,弹栈顶元素,赋给t,将数组下标为栈顶指针的元素的值设为1,t=t-rchild。⑥如果③④⑤都不成立时,将t赋值为空。
图4非递归后序遍历二叉树算法流程图
三、源代码
下面给出的是用递归和非递归算法实现的程序的源代码:
#include iostream
using namespace std;
typedef char datatype; //结点属性值类型
typedef struct node //二叉树结点的类型
{
datatype data;
struct node* lchild,*rchild;
}bintnode;
typedef bintnode *bintree;
bintree root; //指向二叉树根结点指针
typedef struct stack
{
bintree data[100]; //data 元素类型为 指针
int tag[100]; //为栈中元素作的标记,用于后序遍历
int top; //栈顶指针
}seqstack;
void push(seqstack* s,bintree t) //进栈
{
s-data[++s-top]=t;
}
bintree pop(seqstack* s) //出栈
{
if(s-top!=-1) //非递归遍历中,top初始值为-
您可能关注的文档
- 表面等离子共振技术(surfaceplasmonresonancetechnology,SPR)综述.doc
- 袁洪桩基模拟方法.doc
- 表面贴装元器件管理.doc
- 袋式除尘系统运行规程试行.doc
- 裂解汽油加氢第一章工艺技术规程.doc
- 装修后80件后悔的事情.docx
- 裂缝性油藏深部复合调剖终结者毕业论文高景涛1.doc
- 装卸工艺学简答题重点.doc
- 表象的毁灭.doc
- 装柜专家影响计算结果的几大因素-含图片.doc
- 广东省广州省实验中学教育集团2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州大学附属中学2025-2026学年八年级上学期奥班期中物理试题(解析版).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(含答案).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(解析版).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 2026《中国人寿上海分公司营销员培训体系优化研究》18000字.docx
- 《生物探究性实验教学》中小学教师资格模拟试题.docx
原创力文档

文档评论(0)