二叉树的建立及遍历

#include <iostream>

using namespace std;

struct LinkList

{

    char data;  /*建立二叉树 */

    LinkList *lchild;

    LinkList *rchild;

};

LinkList* CreateLinkList()

{                        /* 创建链表,其实是个先序遍历的形式。之所以不用指针传递参数是因为实参与形参的关系,在这里用指针传参会弄巧成拙*/

    char a;

    LinkList *q;

    cin>>a;

    if(a=='#')

        q=NULL;  /*这里的模式是如果输入字符为#,意味着不存在该结点。递归里的自身函数调用其实是层次上的关系,真正的核心操作是那些非调用的函数操作*/

    else

    {

        q=new LinkList;

        q->data=a;

        q->lchild=CreateLinkList();

        q->rchild=CreateLinkList();

    }

    return q;

}

void Firstbianli(LinkList *q)    /*先序遍历。如果该结点不存在,返回。如果存在,就输出该结点数据,之后向左子树、右子树遍历。*/

{

    if(q==NULL)

        return;

    else

    {

        cout<<q->data;

        Firstbianli(q->lchild);  /*遍历包括两个核心操作,一个是次序、一个是访问。自身函数的调用主要是次序,而非自身函数调用的操作就是访问。*/

        Firstbianli(q->rchild);

    }

}

void Midbianli(LinkList *q)    /*中序遍历*/

{

    if(q==NULL)

        return;

    else

    {

        Midbianli(q->lchild);

        cout<<q->data;              /*无论什么遍历,其实遍历次序是一样的,都是先序遍历,然而不同的是访问次序。*/

        Midbianli(q->rchild);

    }

}

int main()

{

    LinkList *q;

    q=NULL;

    q=CreateLinkList();

    Firstbianli(q);

    cout<<'\n';

    Midbianli(q);

    return 0;

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容