zoukankan      html  css  js  c++  java
  • 建立一棵二叉链表表示方式存储的二叉排序树,并打印输出对其由大到小遍历的结果

    题目:从键盘接受输入,每个节点所含数据元素均为单字符,
    要完成:建立一棵二叉链表表示方式存储的二叉排序树,并打印输出对其由大到小遍历的结果。
    测试数据:输入 EFHJBCAGID,符号“@”表示结束字符

    分析:方法一:中序遍历该二叉排序树,即可得到由小到大遍历的结果,并将每个结果都存放在一个栈中,然后再逐个弹栈顶元素。

             方法二:直接逆中序遍历

    #include<stdio.h>
    #include<stack>
    using namespace std;
    
    typedef struct BSTNode{
        char data;
        struct BSTNode *lchild,*rchild;
    }BSTNode,*BSTree;
    
    stack<char> st;// create a stack, name it s, the data that stores in it is char
    
    void insert(BSTree *bst,char ch)//插入节点 
    {
        if(*bst==NULL){
            BSTNode *q;
            q=new BSTNode;
            q->lchild=NULL;
            q->rchild=NULL;
            q->data=ch;
            *bst=q;
        }
        else{
            if(ch>(*bst)->data)
               insert(&((*bst)->rchild),ch);
            else if(ch<(*bst)->data)
               insert(&((*bst)->lchild),ch);
        }
    }
    
    void creatBST(BSTree *bst)//创建二叉排序树
    {
        char ch;
        *bst=NULL;
        scanf("%c",&ch);
        while(ch!='@'){
            insert(bst,ch);
            scanf("%c",&ch);
        }
     } 
    
    void inTravel(BSTree bst){ //中序遍历该二叉树,并将节点放入栈中 
        if(bst!=NULL){
            inTravel( bst->lchild);
            st.push(bst->data);
            inTravel( bst->rchild);
        }
    }
    
    void reverseTravel(BSTree bst){ //逆中序遍历输出 
        if(bst!=NULL){
            reverseTravel(bst->rchild);
            printf("%c",bst->data);
            reverseTravel(bst->lchild);
        }
    }
    
    int main(){
        BSTree bst;
        bst=new BSTNode;
        creatBST(&bst);
        inTravel(bst);
        while(!st.empty()){
            printf("%c",st.top());
            st.pop();
        }
        
        printf("
    ");
        reverseTravel(bst);
        return 0;
    } 

    运行结果截图:

    相关补充:

    栈:先进先出,栈顶进,栈顶出

    1.头文件 #include<stack>

    2.定义:stack<int >s,int类型

                   stack<char>s,char类型,

                   stack<double>,double类型,

                   ......

    s.pop():从栈顶删除元素

    s.push():从栈顶添加元素

    s.size():计算栈元素个数

    s.top():返回栈顶元素

    s.empty():判断是否为空,true: if the container(容器) size is 0;false: container  size not 0.

  • 相关阅读:
    五、页脚footer
    一、页眉header
    四、(2)列布局+媒体查询
    二、导航栏nav
    coredns介绍
    pandas指定列索引和行索引
    学习笔记246—国家自然科学基金申请书写作攻略【收藏】
    Axios请求传参的格式
    NodeJspm2常用命令
    FastAPI实现谷歌DialogFlow 接口问答批量导入导出和批量删除 DialogFlow batch import and export Q&A interface
  • 原文地址:https://www.cnblogs.com/sqm724/p/12755166.html
Copyright © 2011-2022 走看看