码迷,mamicode.com
首页 > 其他好文 > 详细

知识点总结报告 2.1

时间:2018-02-02 00:53:56      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:一段   指针   注意   开始   node   ret   条件   order   连续   

---恢复内容开始---

  知识点:简单二叉树的前序创建以及三种基本遍历

  二叉树:极其重要的数据结构之一,一个node节点包含一个数据域,两个指针域,这两个指针域分别向下指向它的左儿子,右儿子,而左右儿子又是一个节点,同样指向他们的左儿子、右儿子……二叉树与链表有类似之处,大家别看我们在纸上画的树的图节点之间是用线连起来的,但是实际上每个节点在内存中的空间分配是不连续的,因为它是随机的,通过跟进调试配合watches窗口配合观察就能发现这一点。二叉树的创建函数和遍历函数都是递归函数,因此要写好退出函数的条件不然就一直递归下去了。

  对于二叉树,初学者可以先从网上拷贝一段可执行的清楚地代码,通过调试,一步一步地看,一步一步地想,不然,很难想懂很花时间

  二叉树的定义:二叉树

typedef struct BiTNode
{
    char data;
    struct BiTNode *leftchild;
    struct BiTNode *rightchild;
}BiTNode,*BiTree;//注意这里的 BiTNode等于*BiTree,注意*号,BiTree是一个类型名, BiTree T,声明的是一个基类型为BiTNode的指针T,BiTree *T则是把*T看成是指针,T是这个指针的地址

  二叉树的前序创建:先设置好中断递归的条件(层层递归一次中断是跳不出去的)

void createBiTree(BiTree *T)
{
    char ch;
    ch=getchar();
    if(ch==#)
    {
        *T=NULL;
    }
    else
    {
        *T=(BiTree)malloc(sizeof(BiTNode));
        (*T)->data=ch;
        createBiTree(&(*T)->leftchild);
        createBiTree(&(*T)->rightchild);
    }
}

  二叉树的前、中、后序遍历:前序遍历就是先遍历根节点再根节点的左儿子这边,最后遍历根节点的右儿子这边;中序遍历就是中间才遍历根节点;后序遍历就是最后遍历根节点。

void operation(char ch,int n)
{
    printf("这个字母是:%c,他在第%d层\n",ch,n);
}

void PreOrderTraverse(BiTree T,int level)
{
    if(T==NULL)
    {
        return ;
    }
    operation(T->data,level);
    PreOrderTraverse(T->leftchild,level+1);
    PreOrderTraverse(T->rightchild,level+1);
}

void InOrderTraverse(BiTree T,int level)
{
    if(T==NULL)
    {
        return ;
    }
    InOrderTraverse(T->leftchild,level+1);
    operation(T->data,level);
    InOrderTraverse(T->rightchild,level+1);
}

void PostOrderTraverse(BiTree T,int level)
{
    if(T==NULL)
    {
        return ;
    }
    PostOrderTraverse(T->leftchild,level+1);
    PostOrderTraverse(T->rightchild,level+1);
    operation(T->data,level);
}

接下来是主函数:

int main()
{
    int levell=1;
    BiTree TREE=NULL;
    printf("请按照前序输出:\n");
    createBiTree(&TREE);
    printf("前序输出结果:\n");
    PreOrderTraverse(TREE,levell);
    printf("中序输出结果:\n");
    InOrderTraverse(TREE,levell);
    printf("后序输出结果:\n");
    PostOrderTraverse(TREE,levell);
    return 0;
}

在运行代码时不要随意写上测试用例,不然很可能得不出输出,因为创建函数这个递归函数还没有跳出去。因此写测试用例时要先在纸上把图画好,正确的输入。

比如我们画出来得二叉树图是这样的:

技术分享图片

技术分享图片

那么按照前序输入格式,我们应该这样输入:ABC##D#E##FG#H##IJ###

得到的结果是这样的:技术分享图片

 

知识点总结报告 2.1

标签:一段   指针   注意   开始   node   ret   条件   order   连续   

原文地址:https://www.cnblogs.com/desier/p/8401758.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!