📄 bitree.h
字号:
//函数实现部分
//二叉链表的结构定义
typedef char TElemType;
typedef struct BiTNode{
TElemType data;//存储
struct BiTNode *lchild,*rchild; //
}BiTNode ,*BiTree;
//栈的操作,栈中的元素类型的Bitree
#include "stack.h"
void CreateBiTree(BiTree &T){
//建立二叉树T
TElemType ch;
scanf("%c",&ch);
if (ch==' ') T=NULL;
else{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}//CreateTree
Status visit(TElemType e){
//最简单的Visit,输出元素e的值
printf("%c",e);
return OK;
}//Visit
Status PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e)){
//采用二叉链表的存储结构,Visit()对数据元素的操作
//先序遍历二叉树的递归算法,对每个数据元素调用Visit()
if (T) {
if ((*Visit)(T->data))
if(PreOrderTraverse(T->lchild,(*Visit)))
if(PreOrderTraverse(T->rchild,(*Visit)))return OK;
return ERROR;
}
else return OK;
}//PreOrderTraverse
Status InOrderTraverse(BiTree T,Status(*Visit)(TElemType e)){
//采用二叉链表的存储结构,Visit()对数据元素的操作
//中序遍历二叉树的递归算法,对每个数据元素调用Visit()
if (T) {
if(InOrderTraverse(T->lchild,(*Visit))){
(*Visit)(T->data);
if(InOrderTraverse(T->rchild,(*Visit)))return OK;}
return ERROR;
}
else return OK;
}//InOrderTraverse
Status PostOrderTraverse(BiTree T,Status(*Visit)(TElemType e)){
//采用二叉链表的存储结构,Visit()对数据元素的操作
//后序遍历二叉树的递归算法,对每个数据元素调用Visit()
if (T) {
if(PostOrderTraverse(T->lchild,(*Visit)))
if(PostOrderTraverse(T->rchild,(*Visit))){
(*Visit)(T->data);
return OK;
}
return ERROR;
}
else return OK;
}//PostOrderTraverse
int PostTreeDepth(BiTree T){/* 后序遍历求二叉树的高度递归算法 */
int hl,hr,max;
if(T!=NULL){
hl=PostTreeDepth(T->lchild);// 求左子树的深度
hr=PostTreeDepth(T->rchild);// 求右子树的深度
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -