中序遍历的非递归算法
void InOrder(Bitree T)
{
InitStack(S);p=T;
q=new BiTNode;
while(p||!StackEmpty(S))
{
if(p)
{
Push(S,p);
p=p->lchild;
}
else
{
Pop(S,q);
cout<<q->data;
p=q->rchild;
}
}
}
复制二叉树
void Copy(Bitree T,Bitree &NewT)
{
if(T==NULL)
{
NewT=NULL;
return ;
}
else
{
NewT=new BitNode;
NewT->data=T->data;
Copy(T->lchild,NewT->lchild);
Copy(T->rchild,NewT->rchild);
}
}
计算二叉树的深度
int Depth(Bitree T)
{
if(T==NULL)return 0;
else
{
m=Depth(T->lchild);
n=Depth(T->rchild);
return (m>n?m:n)+1;
}
}
计算二叉树中结点个数
int NodeCount(Bitree T)
{
if(T==NULL) return 0;
else return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
}
统计二叉树的叶结点个数
int LeafNodeCount(Bitree T)
{
if(T==NULL)
return 0;
else if(T->lchild==NULL&&T->rchild==NULL)
return 1;
else return LeafNodeCount(T->lchild)+LeafNodeCount(T->rchild);
}
判别两棵树是否相等
bool compTree(BTree a, BTree b)
{
if(a == NULL && b == NULL)
return true;
if(a == NULL && b != NULL || a != NULL && b == NULL)
return false;
if(a->data == b->data)
{
if(compTree(a->lChild, b->lChild))
return compTree(a->rChild, b->rChild))
else if(compTree(a->lChild, b->rChild))
return compTree(a->rChild, b->lChild);
}
return false;
}
交换二叉树每个结点左孩子和右孩子
void ChangeLR(Bitree &T)
{
Bitree temp;
if(T->lchild==NULL&&T->rchild==NULL)
return ;
else
{
temp=T->lchild;
T->lchild=T->rchild;
T->rchild=temp;
}
ChangeLR(T->lchild);
ChangeLR(T->rchild);
}
双序遍历二叉树
void twoorder(Bitree T)
{
if(T)
{
cout<<T->data;
twoOrder(T->lchild);
cout<<T->data;
twoOrder(T->rchild);
}
}
计算二叉树的最大宽度
int width(Bitree T)
{
if(T==NULL) return 0;
else
{
Bitree Q[];
forn=1;rear=1;last=1;
temp=0;maxw=0;
Q[rear]=T;
while(fornt<last)
{
p=Q[front++]; temp++;
if(p->lchild!=NULL) Q[++rear] = p->lchild;
if(p->rchild!=NULL) Q[++rear] = p->rchild;
if(front>last)
{
last=rear;
if(temp>maxw)maxw=temp;
temp=0;
}
}
return maxw;
}
}
统计树中度为1的结点数目
int Level(Bitree T)
{
int num=0;
if(T)
{
QueueInit(Q);QueueIn(Q,bt);
while(!QueueEmpty(Q))
{
p=QueueOut(Q);
if((p->lchild&&!p->rchild)||(p->rchild&&!p->lchild))num++;
if(p->lchild) QueueIn(Q,p->lchild);
if(p->rchild) QueueIn(Q,p->rchild);
}
}
return num;
}