📄 bitree.h
字号:
#ifndef BITREE_H
#define BITREE_H
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define IBFEASIBLE -1
#define OVERFLOW -2
#define MAXLEN 20
#define MAXSIZE 20
typedef int Status;
typedef char TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild, *rchild; /* 左右孩子指针 */
} BiTNode, *BiTree; /* 二叉树的二叉链表存储表示 */
Status CreateBiTree( BiTree & T);
//操作结果:构造二叉树T。
//先序输入二叉树
Status Create( BiTree &T );
//初始条件:二叉树T存在,e是T中某个结点。
//操作结果:有提醒文字的创建树
void PrintBiTree( BiTree T );
//初始条件:二叉树T存在,e是T中某个结点。
//操作结果:有文字说明的,前序输出
Status InitBiTree(BiTree & T);
//操作结果:构造空二叉树。
Status BiTreeEmpty(BiTree & T );
//初始条件:二叉树T存在。
//操作结果:若T为空二叉树,则返回TRUE,否则FALSE。
Status ClearBiTree(BiTree &T);
//初始条件:二叉树T存在。
//操作结果:将T清为空二叉树,成功则返回TRUE,否则FALSE
Status DestroyBiTree(BiTree &T);
//初始条件:二叉树T存在。
//操作结果:销毁二叉树T。
Status BTValue( BiTree T, BiTNode E, TElemType &e );
//初始条件:二叉树T存在,e是T中某个结点。
//操作结果:返回e的值。
Status BTAssign( BiTree &T, TElemType &e, TElemType value );
//初始条件:二叉树T存在,e是T中某个结点。
//操作结果:结点e赋值为value。
BiTree Root( BiTree T);
//初始条件:二叉树T存在。
//操作结果:返回T的根。
int BiTreeDepth( BiTree T );
//初始条件:二叉树T存在。
//操作结果:返回T的深度。
int Counter( BiTree T );
//初始条件:二叉树T存在。
//操作结果:返回T的结点的个数
int NumLeaf( BiTree T );
//初始条件:二叉树T存在。
//操作结果:返回T的叶子个数
int BiTreeWidth( BiTree T );
//初始条件:二叉树T存在。
//操作结果:返回T的的宽度
int CountDegree2( BiTree T );
//初始条件:二叉树T存在。
//操作结果:返回T中度为2的结点数
//递归算法实现
BiTree Parent( BiTree T, TElemType e );
//初始条件:二叉树T存在,e是T中某个结点。
//操作结果:若e是T的非根结点,则返回它的双亲,否则返回“空”。
BiTree LeftChild( BiTree T, TElemType e );
//初始条件:二叉树T存在,e是T中某个结点。
//操作结果:返回e的左孩子。若e无左孩子,则返回“空”
BiTree RightChild( BiTree T, TElemType e );
//初始条件:二叉树T存在,e是T中某个结点。
//操作结果:返回e的右孩子。若e无左孩子,则返回“空”。
BiTree LeftSibling( BiTree T, TElemType e );
//初始条件:二叉树T存在,e是T中某个结点。
//操作结果:返回e的左兄弟。若e 是T的左孩子或无左兄弟,则返回“空”。
BiTree RightSibling( BiTree T, TElemType e );
//初始条件:二叉树T存在,e是T中某个结点。
//操作结果:返回e的右兄弟。若e是T的右孩子或无右兄弟,则返回“空”。
//Status ( * Visit )( TElemType e );
//用于下面Print函数的指针函数
//Status Print( TElemType e );
//输出e
Status Visit( TElemType e );
//输出e
BiTree FindNode(BiTree T, TElemType x);
//返回data域为x结点的指针
//Status Exchange( BiTree T );????????????????????????????????????????????????????
//交换左右孩子
Status PreOrderTraverse( BiTree T, Status ( * Visit )( TElemType e ) );
//前序遍历的递归算法
Status InOrderTraverse( BiTree T, Status ( * Visit )( TElemType e ) );
//中序遍历的递归算法
Status PostOrderTraverse( BiTree T, Status ( * Visit )( TElemType e ) );
//后序遍历的递归算法
Status LevelOrdeTraverse( BiTree T, Status ( * Visit )( TElemType e ) );
//层序遍历的非递归算法
Status PreOrder( BiTree T, Status( * Visit )( TElemType e ) );
//前序遍历的非递归算法
Status InOrder( BiTree T, Status( * Visit )( TElemType e ) );
//中序遍历的非递归算法
Status PostOrder( BiTree T, Status ( * Visit )( TElemType e ) );
//后序遍历的非递归算法
void WriteExpr( BiTree T );
//用带括号的中序表示式输出
Status IsLikeBit( BiTree S,BiTree T );
//判断S和T是否相似
Status IsCompleteBit( BiTree T );
//判定T是不是完全二叉树,是,返回TRUE,否则,返回FALSE
//要用到队列
Status InserChild( BiTree T, BiTree p, int LR, BiTree c);
//初始条件:二叉树T存在,p指向T中某个结点,LR为0或1,非空二叉树c与T不相交且右子树为空。
//操作结果:根据LR为0或1,插入c为T中p所指结点的左或右子树。p所指结点的原有左或右子树则成为c的右子树。
Status DeleteChild( BiTree T, BiTree p, int LR );
//初始条件:二叉树T存在,p指向T中某个结点,LR为0或1。
//操作结果:根据LR为0或1,删除T中p所指结点的左或右子树。
Status ArrayCreate( BiTree &T, char *ch, int &i );
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -