(二)二叉树的抽象数据类型定义及遍历
2018-01-29 16:26
134 查看
类型名称 :二叉树
数据对象集 :一个有穷的结点集合。若不为空,则由根节点和其左、右二叉子树组成。
操作集:
Boolean isEmpty(BinTree BT);//判别BT是否为空
voidTraversal(BinTree BT);//遍历,按某个顺序访问每一个结点
BinTree CreatBinTree(); //创建一个二叉树
//常见的遍历方法有:
voidPreOrderTraversal(BinTree
BT);//先序 ----- 根 、左子树、右子树
voidInOrderTraversal(BinTree
BT);//中序 ----- 左子树、根、右子树
voidLevelOrderTraversal(BinTree
BT);//后序遍历-----左子树、右子树、根
(1)先序遍历
遍历过程:1、访问根节点 。2、访问左子树。3、访问右子树。
(2)中序遍历
遍历过程:1、访问左子树。2、访问根节点。3、访问右子树
遍历过程:1、访问左子树。2、访问右子树。3、访问根节点
void InOrderTraversal( BinTree BT )
{
BinTree T = BT;
Stack S = CreatStack( MaxSize ); /*创建并初始化堆栈S*/
while( T || !IsEmpty(S) ){
while(T){ /*一直向左并将沿途结点压入堆栈*/
Push(S,T);
T = T->Left;
}
if(!IsEmpty(S)){
T = Pop(S); /*结点弹出堆栈*/
printf(“%5d”, T->Data); /*(访问)打印结点*/
T = T->Right; /*转向右子树*/
}
}
}
先序遍历非递归算法
void InOrderTraversal( BinTree BT )
{
BinTree T = BT;
Stack S = CreatStack( MaxSize ); /*创建并初始化堆栈S*/
while( T || !IsEmpty(S) ){
while(T){ /*一直向左并将沿途结点压入堆栈*/
Push(S,T);
printf(“%5d”, T->Data); /*(访问)打印结点*/
T = T->Left;
}
if(!IsEmpty(S)){
T = Pop(S); /*结点弹出堆栈*/
T = T->Right; /*转向右子树*/
}
}
}
数据对象集 :一个有穷的结点集合。若不为空,则由根节点和其左、右二叉子树组成。
操作集:
Boolean isEmpty(BinTree BT);//判别BT是否为空
voidTraversal(BinTree BT);//遍历,按某个顺序访问每一个结点
BinTree CreatBinTree(); //创建一个二叉树
//常见的遍历方法有:
voidPreOrderTraversal(BinTree
BT);//先序 ----- 根 、左子树、右子树
voidInOrderTraversal(BinTree
BT);//中序 ----- 左子树、根、右子树
voidLevelOrderTraversal(BinTree
BT);//后序遍历-----左子树、右子树、根
(1)先序遍历
遍历过程:1、访问根节点 。2、访问左子树。3、访问右子树。
void PreOrderTraversal(BinTree BT) { if(BT){ printf("%d",BT->Data); PreOrderTraversal(BT->Left); PreOrderTraversal(BT->Right); } }
(2)中序遍历
遍历过程:1、访问左子树。2、访问根节点。3、访问右子树
void InOrderTraversal(BinTree BT) //中序遍历 { if(BT){ InOrderTraversal(BT->Left); printf("%d",BT->Data); InOrderTraversal(BT->Right); } }(3)后序遍历
遍历过程:1、访问左子树。2、访问右子树。3、访问根节点
void LevelOrderTraversal(BinTree BT)//后序遍历 { if(BT){ LevelOrderTraversal(BT->Left); LevelOrderTraversal(BT->Right); printf("%d",BT->Data); } }中序遍历的非递归算法
void InOrderTraversal( BinTree BT )
{
BinTree T = BT;
Stack S = CreatStack( MaxSize ); /*创建并初始化堆栈S*/
while( T || !IsEmpty(S) ){
while(T){ /*一直向左并将沿途结点压入堆栈*/
Push(S,T);
T = T->Left;
}
if(!IsEmpty(S)){
T = Pop(S); /*结点弹出堆栈*/
printf(“%5d”, T->Data); /*(访问)打印结点*/
T = T->Right; /*转向右子树*/
}
}
}
先序遍历非递归算法
void InOrderTraversal( BinTree BT )
{
BinTree T = BT;
Stack S = CreatStack( MaxSize ); /*创建并初始化堆栈S*/
while( T || !IsEmpty(S) ){
while(T){ /*一直向左并将沿途结点压入堆栈*/
Push(S,T);
printf(“%5d”, T->Data); /*(访问)打印结点*/
T = T->Left;
}
if(!IsEmpty(S)){
T = Pop(S); /*结点弹出堆栈*/
T = T->Right; /*转向右子树*/
}
}
}
相关文章推荐
- 实验五 二叉树的定义与遍历
- Go语言二叉树定义及遍历算法实现
- Python二叉树的定义及常用遍历算法分析
- Python二叉树定义与遍历方法实例分析
- 二叉树的定义与遍历
- JavaScript实现二叉树定义、遍历及查找的方法详解
- 二叉树的定义-创建-遍历三步走
- 二叉树的定义、存储结构、树的遍历
- 二叉树系列——二叉树的定义以及各种遍历方式
- 数据结构类型定义及基本操作汇总(二)-- 二叉树及其遍历
- 二叉树的建立(非递归建立与定义建立)与基本操作(广度和深度遍历,求叶子树高)实现
- 【数据结构】二叉树的定义,递归遍历,非递归遍历,层次遍历,深度等
- Python定义二叉树及4种遍历方法实例详解
- 二叉树的基本操作(定义、遍历、高度、生成)【数据结构】
- 二叉树层序遍历,不用定义队列
- 二叉树要掌握的知识点(-)(定义、创建、先中后序遍历、求深度)
- 二叉树的基本定义和遍历
- 二叉树定义及相关术语、节点数计算公式、代码实现(遍历,Java版)
- Java二叉树(一)--定义及前序、中序、后序、层次遍历及求高度的实现
- 二叉树的定义、前序遍历、广度遍历