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

全部博文(21)

文章存档

2013年(16)

2012年(5)

我的朋友

分类: C/C++

2013-03-24 12:50:23

一道二叉树的基础题目

思路:这题很简单,先把字符串push到堆栈中,然后依次insert到二叉树当中,最后递归前序遍历,就可以了。

直接上代码

点击(此处)折叠或打开

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

  4. using namespace std;

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

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

  11. class BinaryTree {
  12.     public:
  13.         BinaryTree(): root(NULL) {}
  14.         void run() {
  15.             stack<string> s;
  16.             string str;
  17.             while (cin >> str) {
  18.                 if (str[0] == '*' || str[0] == '$') {
  19.                     buildTree(s);
  20.                     preOrder();
  21.                     if (str[0] == '$')
  22.                         return;
  23.                 } else
  24.                     s.push(str);
  25.             }
  26.         }

  27.     private:
  28.         void buildTree(stack<string> &s) {
  29.             while (!s.empty()) {
  30.                 string str = s.top();
  31.                 s.pop();
  32.                 for (int i=0; i<str.size(); i++)
  33.                     insert(str[i]);
  34.             }
  35.         }

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

  41.         void preOrder(Node *tree) {
  42.             if (tree == NULL)
  43.                 return;
  44.             cout << tree->val;
  45.             preOrder(tree->left);
  46.             preOrder(tree->right);
  47.             delete tree;
  48.         }

  49.         void insert(const char c) {
  50.             if (root == NULL)
  51.                 root = new Node(c);
  52.             else {
  53.                 Node *ptr = root;
  54.                 Node *pre = NULL;
  55.                 while (ptr) {
  56.                     if (ptr->val == c)
  57.                         return;
  58.                     else if (ptr->val > c) {
  59.                         pre = ptr;
  60.                         ptr = ptr->left;
  61.                     } else {
  62.                         pre = ptr;
  63.                         ptr = ptr->right;
  64.                     }
  65.                 }
  66.                 if (pre->val > c)
  67.                     pre->left = new Node(c);
  68.                 else
  69.                     pre->right = new Node(c);
  70.             }
  71.         }

  72.         Node *root;
  73. };

  74. int main() {
  75.     BinaryTree btree;
  76.     btree.run();

  77.     return 0;
  78. }

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

上一篇:POJ2533

下一篇:POJ2255

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