现在的位置: 首页 > 综合 > 正文

【数据结构】二叉树头文件

2016年09月13日 ⁄ 综合 ⁄ 共 1234字 ⁄ 字号 评论关闭

以下仅含作业题所用到的函数,其它函数自行寻找答案(书上的三种遍历代码是正确的)

bitre BiTree::create_pre_bitre(bitre T) 
//读入后构造二叉树,调用方式this.create_pre_bitre(root),this指对象名,下同
{
char ch;
cin>>ch;
if (ch=='.') T=NULL;
else
{
T=new bnode;
T->data=ch;
T->lchild=create_pre_bitre(T->lchild);
T->rchild=create_pre_bitre(T->rchild);
}
return T;
}

void BiTree::dis(bitre T) //析构函数的组成函数
{
if(T!=NULL)
{
dis(T->lchild);
dis(T->rchild);
delete T;
}
}

bitre BiTree::change_child(bitre T) //交换左右孩子指针的值
{
if (T!=NULL)
{
bitre temp;
temp=T->rchild;
T->rchild=T->lchild;
T->lchild=temp;
T->lchild=change_child(T->lchild);
T->rchild=change_child(T->rchild);
}
return T;
}

以下两个函数不是二叉树类函数,需要用到友元函数(自己翻书)

bitre exch(bitre T,char A[],int n) //从数组形式转换到链表二叉树
{
if (n<=num && A[n-1]!='.')
{
T=new bnode;
T->data=A[n-1];
T->lchild=exch(T->lchild,A,2*n);
T->rchild=exch(T->rchild,A,2*n+1);
}
else T=NULL;
return T;
}

bitre copy_bitre(bitre T1,bitre T2) //拷贝二叉树
{
if (T1==NULL)
return NULL;
else
{
T2=new bnode;
T2->data=T1->data;
T2->lchild=copy_bitre(T1->lchild,T2->lchild);
T2->rchild=copy_bitre(T1->rchild,T2->rchild);
return T2;
}
}

typedef struct node
{
char data;
struct node *lchild, *rchild;
} bnode,*bitre; //bnode为树节点,bitre为指向树结点的指针

构造类 class BiTree 含有私有成员bitre root 解释:以下部分函数类型为二叉树结点指针型,这就是与书上代码的最大区别。经测试,按照书上用void作为函数类型,运行时会出错,调试发现指针所指的结点的各个值不会因为函数发生变化。百度后发现,必须使用指针类型函数,即函数return指针值放可实现。
并没有给出完整程序,希望各位自行完成。

抱歉!评论已关闭.