建立二叉树的几种方法
1.书上(前序创建二叉树)
//先序方式建树
//这里的ch数组是要建立的二叉树的先序遍历的序列,char c //是节点为空的标志。
```cpp
void _Create1(BinNode <T> * &root,char ch[],int &k,char c)
{
if(ch[k]==c)
return;
else{
root=new BinNode <T>();
root->data=ch[k];
++k;
_Create1(root->lchild,ch,k,c);
++k;
_Create1(root->rchild,ch,k,c);
}
}
void Create1(char ch[],int k,char c)
{
if(strlen(ch)==0)
return ;
_Create1(root,ch,k,c);
}
2.简化第一种方法
//第二个参数只要传数组名即可。
void Create2(BinNode<T> * &p,char * &str)
{
if(str!=NULL && * str != '*')
{
(p) = new BinNode<T>();
(p)->data =*str;
Create2((p)->lchild,++str);
Create2((p)->rchild,++str);
}
}
3.利用前序和后序创建二叉树
//n为树的节点个数;
BinNode<T> * _Creat3(char ps[],char is[],int n)
{
if(n<=0)
return NULL;
int i=0,m;
while (i < n)
{
if(ps[0] == is[i])
{
m = i;
break;
}
++i;
}
if(i>=n)
return NULL;
BinNode <T> * p=new BinNode <T> ();
p->data=ps[0];
p->rchild=_Creat3(ps+m+1,is+m+1,n-m-1);
return p;
}
//此时的m为临界点 is数组中下标<m的是ps[0]的左子树,大于m的为右子树。
p->lchild=_Creat3(ps+1,is,m);//因为第一个结点已经建立好了,ps往后以一位;
void Creat3(char ps[],char is[],int n)
{
root=_Creat3(ps, is, n);
}