1.二叉树的顺序存储
#define MAXSIZE 100
typedef TElemType SqBiTree[MAXSIZE];
SqBiTree bt;
2.二叉树的链式存储结构
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
3.二叉树的先序遍历
void PreOrderTraverse(BiTree T)
{
if(T)
{
cout << T->data;
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
4.二叉树的中序遍历
void InOrderTraverse(BiTree T)
{
if(T)
{
InOrderTraverse(T->lchild);
cout << T->data;
InOrderTraverse(T->rchild);
}
}
5.二叉树的后序遍历
void PostOrderTraverse(BiTree T)
{
if(T)
{
PosTOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
cout << T->data;
}
}
6.二叉树的非递归遍历
void InOrderTraverse(BiTree T)
{
InitStack(S);
p = T;
BiTree q;
while(p || !StackEmpty(S))
{
if(p)
{
Push(S,p);
p = p->lchild;
}
else
{
Pop(S,q);
cout << q->data;
p = p->rchild;
}
}
}
7.利用先序遍历算法创建二叉树
void CreateBiTree(BiTree &T)
{
char ch;
cin >> ch;
if(ch == '#')
T = NULL;
else
{
T = new BiTNode;
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
8.计算二叉树结点个数
int NodeCount(BiTree T)
{
if(T == NULL)
return 0;
else
return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
}
9.计算二叉树中叶子结点个数
int LeafCount(BiTree T)
{
if(T == NULL)
return 0;
if(T->lchild==NULL && T->rchild==NULL)
return 1;
else
return LeafCount(T->lchild)+LeafCount(T->rchild);
}
10.计算二叉树的深度
int Depth(BiTree T)
{
if(T == NULL)
return 0;
else
{
m = Depth(T->lchild);
n = Depth(T->rchild);
if(m > n)
return m+1;
else
return n+1;
}
}
11.线索二叉树的结点定义
typedef struct BiThrNode
{
TElemType data;
struct BiThrNode *lchild,*rchild;
unsigned char LTag,RTag;
}BiThrNode,*BiThrTree;
12.以结点p为根结点的子树中序线索化
void InThreading (BiThrTree p)
{
if (p)
{
InThreading( p->lchild );
if ( !p->lchild )
{
p->LTag=1;
p->lchild=pre;
}
if ( !pre->rchild )
{
pre->RTag=1;
pre->rchild=p;
}
pre = p;
InThreading(p->rchild);
}
}
void InorderThreading(BiThrTree & Thrt, BiThrTree T)
{
Thrt =new BiThrNode;
Thrt ->LTag = 0;
Thrt ->RTag = 1;
Thrt ->rchild = Thrt;
if(!T)
Thrt ->lchild = Thrt;
else
{
Thrt ->lchild = T;
pre = Thrt;
InThreading(T);
pre ->rchild = Thrt;
pre ->RTag = 1;
Thrt ->rchild = pre;
}
}
13.遍历中序线索二叉树
void InOrderTraverse_Thr(BiThrTree T)
{
p = T->lchild;
while(p != T)
{
while(p->LTag == 0)
p = p->lchild;
cout << p->data;
while(p->RTag==1 && p->rchild!=T)
{
p = p->rchild;
cout << p->data;
}
p = p->rchild;
}
}
14.树的孩子兄弟存储表示
typedef struct CSNode
{
ElemType data;
struct CSNode *firstson,*nextsibling;
}CSNode,*CSTree;
15.哈夫曼树的存储表示
typedef struct
{
int weight;
int parent,lchild,rchild;
}HTNode,*HuffmanTree;