二叉树的遍历(c++学习笔记)
2014-11-18 16:08
225 查看
二叉树的遍历实现方式有两种:递归和非递归。
1.使用递归的方式实现二叉树的遍历。
(1)先序遍历:
首先访问一个二叉树的根节点,然后按顺序分别访问根节点的左子树和右子树:
void Pre1(BTNode* b)
{if(b!=NULL)
{printf("%d",b->data);
Pre1(b->Lchild);
Pre1(b->Rchild);
}
(2)中序遍历:
首先访问左子树,再访问根节点,最后访问右子树;
void mid1(BTNode* b)
{if(b!=NULL)
{mid1(b->Lchild);
printf("%d",b->data);
mid1(b->Rchild);
}
(3)后序遍历:
首先访问左子树,再访问右子树,最后访问根节点;
void rear1(BTNode* b)
{if(b!=NULL)
{rear1(b->Lchild);
rear1(b->Rchild);
printf("%d",b->data);
}
2.第二种实现的方式是使用非递归的方式:
(1)先序遍历:
void Pre2(BTNode* b)
{BTNode* p,* BT[max];
int top=-1;
if(b!=NULL)
{top++;
BT[top]=b;
while(top!=-1)
{p=BT[top];
top--;
printf("%d",p->data);
if(p->Rchild!=NULL)
{top++;
BT[top]=p->Rchild;
}
if(p->Lchild!=NULL)
{top++;
BT[top]=p->Lchild;
}
}
printf("\n")
}
}
(2)中序遍历:
void mid2(BTNode* b)
{BTNode* p,*BT[max];
int top=-1;
if(b!=NULL)
{p=b;
while(top!=-1||p!=NULL)
{p=BT[top];
while(p!=NULL)
{top++;
BT[top]=p;
p->Lchild;
}
if(top!=-1)
{p=BT[top];
top--;
printf(“%d”,p->data);
p=p->Rchild;
}
}
printf("\n");
}
}
(3)后序遍历:
void rear2(BTNode* b)
{BTNode * p,*BT[max];
int flag,top=-1;
if(b!=NULL)
{do
{while(b!=NULL)
{top++;
ST[top]=b;
b=b->Lchild;
}
p=NULL;
flag=1;
while(top!=-1&&flag)
{
b=ST[top];
if(b->Rchild==p)
{
printf("%d",b->data);
top--;
p=b;
}
else
{ b=b->Rchild;
flag=0;
}
}
}while(top!=-1);
printf("\n");
}
}
1.使用递归的方式实现二叉树的遍历。
(1)先序遍历:
首先访问一个二叉树的根节点,然后按顺序分别访问根节点的左子树和右子树:
void Pre1(BTNode* b)
{if(b!=NULL)
{printf("%d",b->data);
Pre1(b->Lchild);
Pre1(b->Rchild);
}
(2)中序遍历:
首先访问左子树,再访问根节点,最后访问右子树;
void mid1(BTNode* b)
{if(b!=NULL)
{mid1(b->Lchild);
printf("%d",b->data);
mid1(b->Rchild);
}
(3)后序遍历:
首先访问左子树,再访问右子树,最后访问根节点;
void rear1(BTNode* b)
{if(b!=NULL)
{rear1(b->Lchild);
rear1(b->Rchild);
printf("%d",b->data);
}
2.第二种实现的方式是使用非递归的方式:
(1)先序遍历:
void Pre2(BTNode* b)
{BTNode* p,* BT[max];
int top=-1;
if(b!=NULL)
{top++;
BT[top]=b;
while(top!=-1)
{p=BT[top];
top--;
printf("%d",p->data);
if(p->Rchild!=NULL)
{top++;
BT[top]=p->Rchild;
}
if(p->Lchild!=NULL)
{top++;
BT[top]=p->Lchild;
}
}
printf("\n")
}
}
(2)中序遍历:
void mid2(BTNode* b)
{BTNode* p,*BT[max];
int top=-1;
if(b!=NULL)
{p=b;
while(top!=-1||p!=NULL)
{p=BT[top];
while(p!=NULL)
{top++;
BT[top]=p;
p->Lchild;
}
if(top!=-1)
{p=BT[top];
top--;
printf(“%d”,p->data);
p=p->Rchild;
}
}
printf("\n");
}
}
(3)后序遍历:
void rear2(BTNode* b)
{BTNode * p,*BT[max];
int flag,top=-1;
if(b!=NULL)
{do
{while(b!=NULL)
{top++;
ST[top]=b;
b=b->Lchild;
}
p=NULL;
flag=1;
while(top!=-1&&flag)
{
b=ST[top];
if(b->Rchild==p)
{
printf("%d",b->data);
top--;
p=b;
}
else
{ b=b->Rchild;
flag=0;
}
}
}while(top!=-1);
printf("\n");
}
}
相关文章推荐
- [学习笔记]二叉树的线索化和遍历
- 数据结构学习笔记-二叉树的层序遍历
- 数据结构与算法分析学习笔记--第四章(二叉树:创建、递归遍历、非递归遍历、根据数据删除结点等)
- 数据结构学习笔记8——简单二叉树的实现与遍历
- 算法学习笔记 二叉树和图遍历—深搜 DFS 与广搜 BFS
- 数据结构学习笔记(8)---二叉树的层次遍历
- [学习笔记]二叉树的遍历
- C++学习笔记——Mat类详解及元素的遍历方法
- c++学习之前序递归遍历二叉树和中序循环遍历二叉树
- 数据结构 学习笔记(四):树(上):树的表示,二分查找,二叉树,先中后层次遍历
- c++ 模板学习笔记:函数模板实现数组通用排序和遍历打印(权哥)
- C++学习笔记-list遍历
- 【算法学习笔记】10.数据结构基础 二叉树初步练习3(遍历与递归复习)
- c++学习之前序递归遍历二叉树和中序循环遍历二叉树
- 【学习笔记】非递归实现先后根遍历二叉树
- c++学习笔记—二叉树基本操作的实现
- 【算法学习笔记】10.数据结构基础 二叉树初步练习3(遍历与递归复习)
- 数据结构学习笔记-二叉树的前、中、后序遍历,递归、非递归方式
- c++学习笔记—二叉树基本操作的实现
- 学习笔记——已知二叉树的先序中序求后序、中序后序求先序的遍历序列