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.

  • 相关阅读:
    jchdl
    jchdl
    UVa 10256 (判断两个凸包相离) The Great Divide
    UVa 11168 (凸包+点到直线距离) Airport
    LA 2572 (求可见圆盘的数量) Kanazawa
    UVa 10652 (简单凸包) Board Wrapping
    UVa 12304 (6个二维几何问题合集) 2D Geometry 110 in 1!
    UVa 10674 (求两圆公切线) Tangents
    UVa 11796 Dog Distance
    LA 3263 (平面图的欧拉定理) That Nice Euler Circuit
  • 原文地址:https://www.cnblogs.com/sqm724/p/12755166.html
Copyright © 2011-2022 走看看