二叉树C++实现

https://blog.csdn.net/Ajay666/article/details/76736333

BiNode * BiTree::create(string &s,int &pos){
    ++pos;
    BiNode * t;
    if((unsigned)pos>=s.size())
        return NULL;
    else{
        if(s[pos]=='#')
            t=NULL;
        else{
            t=new BiNode;
            t->data=s[pos];
            t->lchild=create(s,pos);
            t->rchild=create(s,pos);
        }
        return t;
    }
}
///按照前序遍历序列创建二叉树
void BiTree::createBiTree(string s){
    int pos = -1;
    root=create(s,pos);
}
--------------------- 
作者:Ajay666 
来源:CSDN 
原文:https://blog.csdn.net/Ajay666/article/details/76736333 
版权声明:本文为博主原创文章,转载请附上博文链接!

这段代码生成的二叉树如下图:在这里插入图片描述
我觉得代码的逻辑如下:

  • 每次总是优先生成左子树
  • 左子树满了(为NULL)则开始生成右子树
  • 代码实现就是 t->lchild=create(s,pos); t->rchild=create(s,pos);右子树放左子树后面。注意每次调用左子树都会让树向下长大一些。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值