简单的一个,用C++编写输出用先序遍历输出的二叉树

哈喽。之前还没有写二叉树的时候,我的思维很简单,就是一棵树。

对于一颗二叉树,先写两个类,一个Node结点,一个tree类(里面包括树根和树高)。我是小白,所以想的很少,一开始我以为我可以层次遍历输入,但是我没有弄好一个问题,就是树的数据结构比较复杂。


比如我们看这一棵树,如果用递归的方法去创建一棵树,也就是

BiNode* create(int s[],int &pos,int size)//构造一棵二叉树
{   
{
    root->lchild=create(s,pos,size);
    root->rchild=create(s,pos,size);}
    return root;
}

这样去创建一棵树的话,那么按照这个思路走下去,④号结点是处于③号结点之下的,我们无法将④号放到②号下,所以层次遍历是行不通的,我们只能用简单的先序输入,加一些判断条件,建立这样的一棵二叉树。

网上的有些代码都是这样的输入,我一开始也没有懂,后来才慢慢懂得,如果想实现普通的树的创建,我还在写代码中,应该是用队列的方法实现。

这样一个简单的先序输出的话,我们可以设置一棵树,把叶子节点的左右孩子都设为0(或者其他的判断条件)。若检查到0,则返回其叶子的父亲结点,再继续先序遍历,这样一颗树就可以创建了。createTree的部分结束,那么接下来的先序遍历就很简单,就是一个递归的过程。

贴下我的代码。

#include<iostream>
#include <string>
using namespace std;
class BiNode
{
    public:
    int  data;
    BiNode *lchild;
    BiNode *rchild;
};
class BiTree
{   public:
    BiNode *root;
    int height;
    void create(string &s,int &pos);//创建一棵树
    void preOrder(BiNode *T);//先序遍历二叉树

};
//先序创建一棵二叉树,需要先序遍历

BiNode* create(int s[],int &pos,int size)//构造一棵二叉树
{   pos++;
    BiNode *root=NULL;
    if((pos<size)&&s[pos]!=0)//如果在数组范围内,且值合法
{
    root=new BiNode;
    root->data=s[pos];
    root->lchild=create(s,pos,size);
    root->rchild=create(s,pos,size);}
    return root;
}
//层次输入一棵二叉树
//BiNode * create (int s[],int size)//用队列的数据结构

void _PreOrder(BiNode *_root)
{   BiNode *tmp=_root;
    if(tmp!=NULL){
        cout<<tmp->data;//访问根节点
        _PreOrder(tmp->lchild);//递归遍历左子树
        _PreOrder(tmp->rchild);//递归遍历右子树

    }
}
int main()
{   int a[]={1,2,3,0,0,4,0,0,5,6,0,0,0};
    int pos;
    int size;
    size=13;
    pos=-1;
    BiNode *root=create(a,pos,size);
    //BiNode *root;
   // root=create(a,pos,size);
    _PreOrder(root);
    return 0;
}

这种方法的输入很有讲究,这不是一个通用的方法,一般机试估计这方法不行,下一篇我会详细叙述如何层次遍历一棵二叉树,并实现输出。结果就是这样输出的。


下篇再见啦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值