📄
字号:
//二叉树的抽象数据类型
#include "Stack.h" //关于二叉树的信息都放在这个头文件中。
//--------基本操作的函数原型说明---------------
//--按照先序序列构造二叉链表表示的二叉树T----
short CreateBiTree(BiTree &T){ //T是引用
//按照先序次序输入的二叉树中结点的值,#表示空结点。
//按照其他遍例方式行不通或则很复杂。
TElemType c;
cout<<"请输入按照先序次序输入的二叉树的当前结点值"<<endl;
cin>>c;
if(c=='#')
T=NULL;
else{
T=(BiNode *)malloc(sizeof(BiNode));
if(!T) return ERROR;
T->data=c; //生成根节点
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}//if
return OK;
}//CreateBiTree
//----先序遍例的递归实现----
void LoopPreOrder(BiTree T,void (* visit)(TElemType e)){ //visit是函数指针,这个函数的返回值是void类型
if(T){
(* visit)(T->data);
LoopPreOrder(T->lchild,visit);
LoopPreOrder(T->rchild,visit);
}//if
}//LoopPreOrder
//----中序编例的递归实现----
void LoopInOrder(BiTree T,void (* visit)(TElemType e)){
if(T){
LoopInOrder(T->lchild,visit);
(* visit)(T->data);
LoopInOrder(T->rchild,visit);
}//if
}//LoopInorder
//----后序编例的递归实现---
void LoopPostOrder(BiTree T,void (* visit)(TElemType e)){
if(T){
LoopPostOrder(T->lchild,visit);
LoopPostOrder(T->rchild,visit);
(* visit)(T->data);
}//if
}//LoopPostOrder
//----先序遍例的非递归实现---
void PreOrder(BiTree T,void (* visit)(TElemType e)){
BiTree p=T;//工作指针初试指向二叉树根结点。
SqStack S;//声明辅助栈。
InitStack(S);//栈的初试化。
while(p||!StackEmpty(S)){
if(p){//如果p不空
(* visit)(p->data);//访问p指向的结点。
Push(S,p); //将p入栈。
p=p->lchild;//p指向左孩子。
}//if
else{ //如果p空
Pop(S,p);//退栈,栈顶赋给p
p=p->rchild;
}//else
}//while
}//preOrder
//----中序遍例的非递归实现-----
void InOrder(BiTree T,void (* visit)(TElemType e)){
BiTree p=T;//工作指针初试指向二叉树根结点。
SqStack S;//声明辅助栈。
InitStack(S);//栈的初试化。
while(p||!StackEmpty(S)){
if(p){
Push(S,p);
p=p->lchild;
}//if
else{
Pop(S,p);
(* visit)(p->data);
p=p->rchild;
}//else
}//while
}//InOrder
//---
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -