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.

  • 相关阅读:
    管道及有名管道(pipe与FIFO)
    详细介绍Linux重定向的使用
    Emacs文件和目录操作模式Dired
    exec家族函数
    Seven file types of Unix system(4.3)
    va_list、va_start、va_arg、va_end的原理与使用
    const int*和int const*的区别
    asp.net 文件加载错误
    终于有了属于自己的家,哈哈,很高兴~~
    难得的一场雪
  • 原文地址:https://www.cnblogs.com/sqm724/p/12755166.html
Copyright © 2011-2022 走看看