您的位置:首页 > 其它

二叉树的遍历

2016-05-24 11:34 465 查看
一.实验目的

二叉树的遍历操作是树形结构其他众多操作的基础。本实验旨在使学生进一步加深对二叉树的先序、中序和后序等三种遍历次序特点的理解,熟悉二叉链表存储结构,熟练掌握二叉树上的递归算法的设计技术。

二.实验题目

1.构造一棵二叉树,使用二叉链表方式存储。

2设计程序,按照先序将这棵二叉树遍历出来,要求使用递归和非递归两种实现方式。

3.设计程序求二叉树中叶结点的个数。

#include "iostream"
using namespace std;

typedef struct bitree{
char data;
bitree* lchild;
bitree* rchild;
}*BiTree,BiNode;
int count=0;//非递归遍历时栈指针
int number=0;//计算叶子节点的计数器

void createTree(BiTree& T);
void traverse(BiTree& T);
void not_digui_traverser(BiTree &T);
void search_yezi_number(BiTree T);
int main(){
BiTree root;
createTree(root);
traverse(root);
cout<<endl;
not_digui_traverser(root);
cout<<endl;
search_yezi_number(root);
cout<<"The number of yezi is:"<<number<<endl;
return 0;
}

//先序创建二叉树
//ab#d##C#e##
void createTree(BiTree& T){
cout<<"Input element,if tree is null,please input #"<<endl;
char ch;

cin>>ch;
if('#'==ch){
T=NULL;
}
else{
T=new BiNode;
T->data=ch;
createTree(T->lchild);
createTree(T->rchild);

}
}

//递归先序遍历二叉树
void traverse(BiTree& T){
if(T==NULL){
return;
}
cout<<T->data;
traverse(T->lchild);
traverse(T->rchild);
}

//非递归先序遍历二叉树
//BiTree stack_BiTree[100]={NULL};用数组代替栈
/*
非递归时应用会破坏后面的根节点,所以需要一个变量t BiTree T=t;
*/
void not_digui_traverser(BiTree &t){
BiTree T=t;
BiTree stack_BiTree[100]={NULL};

while(T!=NULL||count!=0){
while(T!=NULL){
cout<<T->data;
stack_BiTree[count]=T;
count++;
T=T->lchild;
}

T=stack_BiTree[--count];
T=T->rchild;
}

}

void search_yezi_number(BiTree T){
if(T==NULL){
return;
}
if(T->lchild==NULL&&T->rchild==NULL){
number++;
}
search_yezi_number(T->lchild);
search_yezi_number(T->rchild);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: