建立二叉树的几种方法

建立二叉树的几种方法

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);
}
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值