Chinaunix首页 | 论坛 | 博客
  • 博客访问: 97974
  • 博文数量: 21
  • 博客积分: 145
  • 博客等级: 入伍新兵
  • 技术积分: 250
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-22 17:37
文章分类

全部博文(21)

文章存档

2013年(16)

2012年(5)

我的朋友

分类: C/C++

2013-03-24 14:18:14

二叉树基础题目:已知前序遍历和中序遍历,求后序遍历
原理链接:

思路:利用中序和前序重建二叉树,然后后序遍历输出。

代码:

点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <string>

  3. using namespace std;

  4. struct Node {
  5.     char val;
  6.     Node *left;
  7.     Node *right;

  8.     Node(char c='*'): val(c), left(NULL), right(NULL) {}
  9. };

  10. class BinaryTree {
  11.     public:
  12.         BinaryTree(): root(NULL) {}
  13.         void run() {
  14.             while (cin>>preOrder>>inOrder) {
  15.                 buildTree();
  16.                 postOrder();
  17.             }
  18.         }

  19.     private:
  20.         void buildTree() {
  21.             root = buildTree(0, preOrder.size()-1, 0, inOrder.size()-1);
  22.         }

  23.         Node* buildTree(int preBegin, int preEnd, int inBegin, int inEnd) {
  24.             if (preBegin > preEnd)
  25.                 return NULL;
  26.             int mid;
  27.             for (mid = inBegin; mid <= inEnd; mid++)
  28.                 if (preOrder[preBegin] == inOrder[mid])
  29.                     break;
  30.             Node *tree = new Node(inOrder[mid]);
  31.             tree->left = buildTree(preBegin+1, preBegin+mid-inBegin, inBegin, mid-1);
  32.             tree->right = buildTree(preBegin+mid-inBegin+1, preEnd, mid+1, inEnd);

  33.             return tree;
  34.         }

  35.         void postOrder() {
  36.             postOrder(root);
  37.             root = NULL;
  38.             cout << endl;
  39.         }

  40.         void postOrder(Node *tree) {
  41.             if (tree == NULL)
  42.                 return;
  43.             postOrder(tree->left);
  44.             postOrder(tree->right);
  45.             cout << tree->val;
  46.             delete tree;
  47.         }
  48.         
  49.         Node *root;
  50.         string preOrder;
  51.         string inOrder;
  52. };

  53. int main() {
  54.     BinaryTree btree;
  55.     btree.run();

  56.     return 0;
  57. }

阅读(484) | 评论(0) | 转发(0) |
0

上一篇:POJ1577

下一篇:POJ1088

给主人留下些什么吧!~~