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


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

  • 相关阅读:
    jQuery获取当前元素是该父元素的第几个元素&获取父元素的第n个子元素
    获取当前月份的天数
    获取当年的每个月份的天数:
    解决ul下的li换行问题,(父元素div加overflow:scroll没作用的问题)
     获取当年的月份的天数:
    程序员成长道路上必经的几个阶段
    CSS如何让文字垂直居中?
    2015年7个重要的Web设计趋势
    引入css文件时,css link和@import区别
    在html页面引用css文件的方法
  • 原文地址:https://www.cnblogs.com/sqm724/p/12755166.html
Copyright © 2020-2023  润新知