zoukankan      html  css  js  c++  java
  • 构造一棵表达树

    下面给出一种算法把后缀表达式转变成表达树。一次一个符号地读入表达式,如果符号是操作数,那么就建立一个单结点树并将它推入栈中;如果是操作符那么就从栈中弹出两棵树T1和T2并形成一棵新树,该树的根就是操作符,它的左、右儿子分别是T1和T2。然后将指向这课新树的指针压入栈中。

    #ifndef STACK_H
    #define STACK_H

    struct BiTreeNode{
    char data;
    BiTreeNode *left;
    BiTreeNode *right;
    public:
    BiTreeNode(char dat,BiTreeNode *l=0,BiTreeNode *r=0):data(dat),left(l),right(r){}
    ~BiTreeNode();//
    };

    class Stack{
    struct Link{
    BiTreeNode *elem;
    Link *next;
    Link(BiTreeNode *e,Link *nxt):elem(e),next(nxt){}
    ~Link(){}
    }* head;
    public:
    Stack():head(0){}
    ~Stack(){}
    void push(BiTreeNode *e);
    BiTreeNode* peek();
    BiTreeNode* pop();
    void midOrderDisplay(BiTreeNode *BT);
    };

    #endif

    #include "Stack.h"
    #include <iostream>
    using namespace std;
    static int count = 0;
    ////////////////////////////////////
    void Stack::push(BiTreeNode *dat){
    head = new Link(dat,head);
    }
    ////////////////////////////////////
    BiTreeNode* Stack::peek(){
    if(head == 0) return 0;
    return head->elem;
    }
    ////////////////////////////////////
    BiTreeNode* Stack::pop(){
    if(head == 0) return 0;
    BiTreeNode* result = head->elem;
    Link *oldHead = head;
    head = head->next;
    delete oldHead;
    return result;
    }
    ////////////////////////////////////
    //中序遍历
    void Stack::midOrderDisplay(BiTreeNode *BT){
    if(BT){
    midOrderDisplay(BT->left);
    cout << BT->data << " ";
    midOrderDisplay(BT->right);
    }
    }
    ////////////////////////////////////
    int main(){
    Stack sk;
    char dt;
    while(dt != '#'){
    cout << "Please input data: " ;
    cin >> dt;
    cout << endl;
    BiTreeNode *btn = new BiTreeNode(dt,0,0);
    if(dt != '+'&&dt != '-'&&dt != '*'&&dt != '/')
    //if(btn->data != 10000)
    sk.push(btn);
    else{
    BiTreeNode *l,*r;
    l = sk.pop();
    r = sk.pop();
    btn->left = r;
    btn->right = l;
    sk.push(btn);
    }
    }
    sk.pop();
    cout << "Print the Tree :" << endl;
    sk.midOrderDisplay(sk.peek());
    return 0;
    }

  • 相关阅读:
    [转]cmd-bat批处理命令延时方法
    chrome pyv8下载
    win10锁屏壁纸路径
    MongoDB系列—— Window 搭建Mongodb 集群
    JS判断所有IE浏览器所有版本
    网页中引用优酷视频默认自动播放超清
    SQL 还原或备份失败数据库变成单个用户模式无法访问
    百度webuploader 上传演示例子
    SQL Server 如何更改SQL Server和windows身份方式验证
    已经阻止此发布者在你的计算机上运行软件
  • 原文地址:https://www.cnblogs.com/phoenixzq/p/1895885.html
Copyright © 2011-2022 走看看