二叉树的基本操作--创建(前序序列、层序生成二叉树)、各种遍历(递归、非递归)

本文介绍了二叉树的链式存储结构,并详细阐述了如何根据前序序列和层序序列创建二叉树。接着,探讨了二叉树的三种遍历方法(前序、中序、后序),提供了递归和非递归的实现方式,包括具体的算法思路和代码示例。
摘要由CSDN通过智能技术生成

以下所有的描述都以这棵树为基础。
这里写图片描述

二叉树的链式存储结构

二叉树中的每一个节点用链表中的一个节点来存储,节点类型声明如下:

typedef struct treeNode
{
    DataType data;  //数据元素
    struct treeNode* lchild; //指向左孩子节点
    struct treeNode* rchild; //指向右孩子节点
}*TreeNode, Tree;

生成二叉树

1、前序序列生成方法

采用输入前序序列的方式生成二叉树,但这里的前序序列并不等同于前序遍历。因为计算机需要知道哪些节点是空白节点,所以应该按下面的方式输入前序序列。用代表空白的节点,于是输入的前序序列是:ABD*G***CE**F*

//创建二叉树,用*填充空节点
void CreateTree(Tree **T)
{
    char ch;
    cin>>ch;
    if(ch == '*')
        *T = NULL;
    else
    {
        *T = (Tree*)malloc(sizeof(Tree));
        (*T)->data = ch;
        CreateTree(&(*T)->lchild);
        CreateTree(&(*T)->rchild);
    }
}

2、层序生成二叉树

很多建立二叉树都是用先序,中序或者后序建立,不过这就要求输入时要自己先想出相应的序列。真的是太麻烦了,亲身经历,快要泪奔了。想实现个二叉树的相关方法,测试不同类型的树的输出真的好累。因此不得设法实现层序生成二叉树的方法。

//创建二叉树,用*填充空节点,逐层建立
//按层输入二叉树,虚结点输入'*'(结束符为'@')
void CreateTreeLayer(Tree **T, char *str)
{
    if(str == NULL)
        return;

    queue<Tree*> nodes;
    Tree *p;
    Tree *f = NULL;
    int front = 0, rear = 0;
    while(*str != '\n')
    {
        if(*str == '@')
            break;
        p = NULL;
        if(*str != '*')
        {
            p = (Tree*)malloc(sizeof(Tree));
            p->data = *str;
            p->lchild = p->rchild = NULL;
        }
        nodes.push(p);
        rear++;
        if(rear ==
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值