码迷,mamicode.com
首页 > 其他好文 > 详细

前缀转后缀(表达式)

时间:2014-10-27 10:42:33      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   for   sp   

问题描述:

  前缀表达式转成后缀表达式,示例:

  * + 4 2 + 3 6 => 4 2 + 3 6 + *

 

思路(树):

  1. 从左往右扫描串

  2. 遇到操作符则递归构造树节点,当前操作符是根节点,并递归构造左右子节点

  3. 后序遍历当前结果,并返回

 

代码:

 1 #include <string>
 2 #include <sstream>
 3 #include <iostream>
 4 
 5 using namespace std;
 6 
 7 string input_str = "* + 4.3 2 + 3.5 6.2";
 8 int ind = 0;
 9 
10 //树结构
11 typedef struct BinaryTreeNode
12 {
13     string cur_str;
14     BinaryTreeNode *left;
15     BinaryTreeNode *right;
16     BinaryTreeNode(string _cur_str)
17     {
18         cur_str = _cur_str;
19         left = NULL;
20         right = NULL;
21     }
22 } BNode_t;
23 
24 //后序遍历树
25 void post_traverse(BNode_t *root, string &post_str)
26 {
27     if( root == NULL )
28         return;
29     post_traverse(root->left, post_str);
30     post_traverse(root->right, post_str);
31     if( post_str != "" )
32         post_str += " " + root->cur_str;
33     else
34         post_str = root->cur_str;
35 }
36 
37 //得到下一个
38 string get_next()
39 {
40     string next = "";
41     for(; ind < input_str.size(); ind++)
42     {
43         if( input_str[ind] !=   )
44             next += input_str[ind];
45         else
46             break;
47     }
48     ind++;
49     return next;
50 }
51 
52 //转换:递归构造树,并后序遍历
53 string transform()
54 {
55     string post_str;
56     string next = get_next();
57     if( ! isdigit(next[0]) )
58     {
59         BNode_t *root = new BNode_t(next);
60         root->left = new BNode_t( transform() );
61         root->right = new BNode_t( transform() );
62         post_traverse(root, post_str);
63         delete root->left;
64         delete root->right;
65         delete root;
66         return post_str;
67     }
68     else return next;
69 }
70 
71 
72 int main()
73 {
74     cout << transform() << endl;
75     return 0;
76 }

 

 

转载请注明引用自:

  http://www.cnblogs.com/breakthings/p/4053444.html 

 

前缀转后缀(表达式)

标签:style   blog   http   color   io   os   ar   for   sp   

原文地址:http://www.cnblogs.com/breakthings/p/4053444.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!