zoukankan      html  css  js  c++  java
  • 创建二叉树,根据前序遍历或根据括号表示法

    二叉树节点:

    typedef struct node{
        elemType data;
        struct node *lchild;
        struct node *rchild;
    }BTNode;

    输入前序遍历序列建立二叉树,空节点为空格:

    //根据前序遍历建立二叉树 
    int create(BTNode *&T){
        elemType ch;
        scanf("%c",&ch);
        if(ch==' ')
            T=NULL;
        else{
            T=(BTNode*)malloc(sizeof(BTNode));
            T->data=ch;
            create(T->lchild);
            create(T->rchild);
        }
        return 1;
    }

    根据树的括号表示法建立二叉树:

    //根据括号表示法创建二叉树
    void create2(BTNode *&root,char *str){
        root=NULL;
        BTNode *p;
        int i=0,k=0;
        stack<BTNode*> s;
        char ch=str[i];
        while(ch!=''){
            switch(ch){
                case '(':{
                    s.push(p);
                    k=1;        //下次添加左孩子节点 
                    break;
                }
                case ',':{
                    k=2;        //下次添加右孩子节点
                    break;
                }
                case ')':{
                    s.pop();
                    break;
                }
                default:{
                    p=(BTNode*)malloc(sizeof(BTNode));
                    p->lchild=p->rchild=NULL;
                    p->data=ch;
                    if(root==NULL)
                        root=p;
                    else{
                        if(k==1){
                            s.top()->lchild=p;
                        }else if(k==2)
                            s.top()->rchild=p;
                    }
                    break;
                }
            }
            ch=str[++i];
        }
        
    }

    测试:

    输入 "ABD  G  CE  F  "

    int main(){
        BTNode *T;
        //输入前序遍历建立二叉树  
        create(T);
        //层次遍历输出二叉树
        levelorder(T);
        return 0;
    }

     

    int main(){
        BTNode *T;
        //括号表示法建立二叉树 
        create2(T,"A(B(D(,G)),C(E,F))");
        
        //层次遍历输出二叉树
        levelorder(T);
        return 0;
    }

  • 相关阅读:
    dblink
    linux 查进程、杀进程、起进程
    oracle 资源统计SQL语句
    DIV+CSS+javascript 手动轮播图
    接受同步数据接口
    java String StringBuffer StringBuilder
    SpringMVC Servlet 分页查询接收参数
    WPF 开发
    收集整理的各地精品青年旅舍大全(
    Linux平台Java调用so库JNI使用例子
  • 原文地址:https://www.cnblogs.com/hekuiFlye/p/9560590.html
Copyright © 2011-2022 走看看