中序遍历对二叉树线索化的递归算法
void InThread(ThreadTree &P,ThreadTree &pre)
{
if(p!=null)
{
InThread(p->lchild,pre);
if(lchild==null)
{
p->lchild=pre;
p->ltag=1;
}
if(pre!=null&&pre->rchild==null)
{
pre->rchild=p;
pre->rtag=1;
}
pre=p;
InThread(p->rchild,pre);
}
}
void CreatInTread(ThreadTree T)
{
ThreadTree pre=null;
if(T!=null)
{
InThread(T,pre);
pre->rchild=null;
pre->rtag=1;
}
}
已知一棵二叉树按顺序存储结构进行存储,设计一个算法,求编号i到j的两个结点的最近的公共祖先结点的值
ElemType Comm_Ancestor(SqTree T,int i,int j)
{
if(T[i]!='#'&&T[j]!='#')
{
while(i!=j)
{
if(i>j)
i=i/2;
else
j=j/2;
}
return T[i];
}
}
假设二叉树采用二叉链表存储结构,设计一个非递归算法求二叉树高度
int Btdepth(BiTree T)
{
if(!T)
return 0;
int front=-1,rear=-1;
int last=0,level=0;
BiTree Q[MaxSize];
Q[++rear]=T;
BiTree P;
while(front<rear)
{
p=Q[++front];
if(p->lchild)
Q[++rear]=p->lchild;
if(p->rchild)
Q[++rear]=p->rchild;
if(front==last)
{