一步一步建立一个二叉树

December 10, 2015 10:54 AM

第一步:创建一个二叉树结点类
class BiTNode                                   //树结点类
{
    public:
        char data;
        class BiTNode *lchild, *rchild;
};
typedef BiTNode* BiTree;                        //定义一个二叉树结点

第二步:建立一棵二叉树

void CreateBiTree(BiTree *T)        //创建一棵二叉树,约定用户遵照前序遍历输入数据
{
    char c;
    while(!(c = cin.get()))         //判断输入是否有误,如果有误清理缓冲重新输入
    {
        cin.clear();                //清除出错状态
        cin.ignore();               //将缓冲区里边现有的数据全部丢弃
        cout << "Input error!!!"<<endl;
    }
    if(c == ' ')                    //如果输入数据为空格,代表没有相应结点
    {
        *T = NULL;
    }
    else                            //递归生成二叉树
    {
        *T = new(BiTNode);
        (*T)->data = c;
        CreateBiTree(&(*T)->lchild);
        CreateBiTree(&(*T)->rchild);
    }
}

第三步:二叉树遍历

void vistit(char data, int level)               访问二叉树结点
{
    cout << data << "位于第" << level << "层" <<endl;
}

void PreTravers(BiTree T, int level)            //前序遍历二叉树
{
    if(T)
    {
        vistit(T->data, level);                 //先访问根结点。然后左子树、右子树
        PreTravers(T->lchild, level+1);         //更改此处三句话的顺序便得到不同的遍历结果
        PreTravers(T->rchild, level+1);
    }
}

第四步:主函数运行测试

int main(int argc, char** argv) {
    BiTree T = NULL;                            //先定义一个空树
    int level = 1;                              //从第一层开始创建

    CreateBiTree(&T);                           //创建二叉树
    PreTravers(T, level);                       //二叉树遍历

    return 0;
}

输入数据时注意:
1.本程序的输入时按照前序遍历的方式存储数据;
2.在数据读入时,遇到叶子结点,叶子结点的左右子树用空格代替,因为只有前序遍历是无法确定一棵二叉树的。

例如,对于下图所示二叉树,应输入:(ABC DE G F ),C、D之间是两个空格,E、G之间是一个空格,G和F之后是两个空格。
这里写图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值