zoukankan      html  css  js  c++  java
  • 二叉树(代码)

    1. 创建二叉树

    因为在含有n个结点的二叉链表中一定有n+1个空指针域,所以在输入数据时一定要给出n+1个空指针值。

    首先还是先要声明一下结构体
    
    typedef char ElemType;
    typedef struct Node
    {
        ElemType data;
        struct Node *lchild,*rchild;
    }BitTree;       
    
    BitTree *creBitTree(void)
    {
        BitTree *bt; ElemType x;
        scanf("%c",&x);
        if(x==' ')bt=NULL;
        else
        {
            bt = (BitTree*)malloc(sizeof(BitTree));
            bt->data = x;
            bt->lchild = creBitTree();
            bt->rchild = creBitTree();
        }
        return bt;
    }

    2,递归遍历算法

    //先序遍历
    void PreOrder(BitTree *bt)
    {
        if(bt!=NULL)
        {
            printf("%c",bt->data);
            PreOrder(bt->lchild);
            PreOrder(bt->rchild);
        }
    }
    //中序遍历
    void InOrder(BitTree *bt)
    {
        if(bt!=NULL)
        {
            InOrder(bt->lchild);
            printf("%c",bt->data);
            InOrder(bt->rchild);
        }
    }
    //后序遍历
    void PostOrder(BitTree *bt)
    {
        if(bt!=NULL)
        {
            PostOrder(bt->lchild);
            PostOrder(bt->rchild);
            printf("%c",bt->data);
        }
    }

    3,非递归遍历算法

    //先序遍历
    void PreOrder(BitTree *T)
    {
        stack S;       //自己实现的栈,以及一些函数
        BitTree *p;
        InitStack(&S);
        push(&S,T);
        while(!EmptyStack(&S))
        {
            p = pop(&S);
            while(p)
            {
                printf("%c ",p->data);
                if(p->rchild) push(&S,p->rchild);
                p = p->lchild;
            }
        }
    }
    
    //中序遍历
    void InOrder(BitTree *T)
    {
        stack S;
        BitTree *p;
        InitStack(&S);
        p = T;
        while(p || !EmptyStack(&S))
        {
            while(p)
            {
                push(&S,p);
                p = p->lchild;
            }
            p = pop(&S);
            printf("%c",p->data);
            p = p->rchild;
        }
    }
    
    //后序遍历
    void PostOrder(BitTree *T)
    {
        stack S;
        BitTree *p,*q;
        InitStack(&S);
        p = T; q = NULL;
        while(p||!EmptyStack(&S))
        {
            if(p!=q)
            {
                while(p)
                {
                    push(&S,p);
                    if(p->lchild) p=p->lchild;
                    else p = p->rchild;
                }
            }
            if(EmptyStack(&S))break;
            q = gettop(&S);
            if(q->rchild==p)
            {
                p=pop(&S);
                printf("%c ",p->data);
            }
            else
            p = q->rchild;
        }
    
    }

         

  • 相关阅读:
    Process 'command '/Users/lidaqiang/Library/Android/sdk/build-tools/27.0.3/aapt'' finished with non-zero exit value 1
    合同诈骗无罪裁判要旨、判决理由及评析意见
    互换不同种类毒品行为如何认定
    正当防卫指导性案例以及研析
    期待可能性理论的司法适用
    共同犯罪认定方法
    刑事案件鉴定意见常用质证要点
    张明楷的100个刑法案例
    刑事律师办案必备126部法律
    正当防卫裁判要旨16条
  • 原文地址:https://www.cnblogs.com/wzqstudy/p/10095433.html
Copyright © 2011-2022 走看看