zoukankan      html  css  js  c++  java
  • 先序遍历递归创建二叉树

    #include "stdio.h"
    #include "stdlib.h"
    typedef struct TNode{   //树节点
        char data;
        TNode *lchild,*rchild;
    }TNode;
    typedef struct LNode{  //栈节点
        char data;
        LNode *next;
    }LNode;
    
    void push(LNode *&l,char data){   //入栈
        LNode *p = (LNode*)malloc(sizeof(LNode));
        p->data = data;
        p->next = l->next;
        l->next = p;
    }
    char pop(LNode *&l){  //出栈
        LNode *p = l->next;
        char tmp = p->data;
        l->next = p->next;
        free(p);
        return tmp;
    }
    
    TNode *CreateTree(LNode *&l){   //先序遍历建立二叉树,参数为数据栈l
        if(l->next->data=='*'){    //假如当前首字符为*,那就说明该节点为NULL,返回上一层的createTree函数,并运行上一层函数未运行完的语句
            pop(l);   //抛掉栈顶元素
            return NULL;
        }
        TNode *p = (TNode*)malloc(sizeof(TNode));   //申请新节点
        p->data = pop(l);   //栈顶元素入树
        p->lchild = CreateTree(l);   //将下一个树节点链接到当前节点的左子树上
        p->rchild = CreateTree(l);   
        return p; //当运行到这个语句的时候,说明树的创建已经完成了。把根节点返回
    }
    
    
    void preOrder(TNode *t){  //先序遍历
        if(t!=NULL){
            printf("%c ",t->data);
            preOrder(t->lchild);
            preOrder(t->rchild);
        }
    }
    void InOrder(TNode *t){  //中序遍历
        if(t!=NULL){
            InOrder(t->lchild);
            printf("%c ",t->data);
            InOrder(t->rchild);
        }
    }
    void postOrder(TNode *t){  //后序遍历
        if(t!=NULL){
            postOrder(t->lchild);
            postOrder(t->rchild);
            printf("%c ",t->data);
        }
    } 
    
    int main(){
        char str[] = {'A','B','C','*','*','D','E','*','G','*','*','F','*','*','*'};  //*表示空
        LNode *s = (LNode*)malloc(sizeof(LNode));
        s->next = NULL;
        for(int i=15;i>=0;i--) push(s,str[i]);  //将树数据入栈
        TNode *t = CreateTree(s);
        preOrder(t);
        InOrder(t);
        getchar();
        return 0;
    }

    代码中序列对应的树如下图:

  • 相关阅读:
    (KMP Next的运用) Period II -- fzu -- 1901
    (字典树)How many--hdu--2609
    (KMP 最大表示最小表示)String Problem -- hdu-- 3374
    (KMP 暴力)Corporate Identity -- hdu -- 2328
    (KMP 扩展)Clairewd’s message -- hdu -- 4300
    (KMP 字符串处理)Substrings -- hdu -- 1238
    (KMP)Count the string -- hdu -- 3336
    JQuery弹出窗口小插件ColorBox
    jquery promot
    C#
  • 原文地址:https://www.cnblogs.com/BreezeFeng/p/14026469.html
Copyright © 2011-2022 走看看