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

二叉树生成镜像

时间:2014-07-26 00:27:36      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   io   re   c   div   

  1 #include <stdio.h>
  2 #include <iostream>
  3 #include <set>
  4 #include <unordered_set>
  5 #include <map>
  6 #include <queue>
  7 #include <vector>
  8 #include <string>
  9 #include <stack>
 10 
 11 using std::cout;
 12 using std::endl;
 13 using std::set;
 14 using std::map;
 15 using std::queue;
 16 using std::vector;
 17 using std::string;
 18 using std::unordered_set;
 19 using std::stack;
 20 using std::begin;
 21 using std::end;
 22 
 23 class TreeNode
 24 {
 25 public:
 26     TreeNode(int v):value(v), left(NULL), right(NULL)
 27     {
 28     }
 29 public:
 30     int value;
 31     TreeNode *left;
 32     TreeNode *right;
 33 };
 34 
 35 TreeNode *postorder(TreeNode *root)
 36 {
 37     if (root == NULL)
 38     {
 39         return NULL;
 40     }
 41     TreeNode *right = postorder(root->left);
 42     TreeNode *left = postorder(root->right);
 43     TreeNode *temp = new TreeNode(root->value);
 44     temp->left = left;
 45     temp->right = right;
 46     return temp;
 47 }
 48 
 49 TreeNode *postorderNR(TreeNode *root)
 50 {
 51     if (root == NULL)
 52     {
 53         return NULL;
 54     }
 55     stack<TreeNode *> sk;
 56     stack<TreeNode *> sk2;
 57     set<TreeNode *> s;
 58     sk.push(root);
 59     TreeNode *p;
 60     while (sk.size() != 0)
 61     {
 62         p = sk.top();
 63         sk.pop();
 64         if (p->left != NULL && s.count(p->left) == 0)
 65         {
 66             sk.push(p);
 67             sk.push(p->left);
 68         }
 69         else if (p->right != NULL && s.count(p->right) == 0)
 70         {
 71             sk.push(p);
 72             sk.push(p->right);
 73         }
 74         else
 75         {
 76             cout << p->value  << ", ";
 77             s.insert(p);
 78             ////////////////////////
 79             TreeNode *r = new TreeNode(p->value);
 80             if (p->left == NULL && p->right == NULL)
 81             {
 82                 r->left = r->right = NULL;
 83 
 84             }
 85             else if (p->left == NULL && p->right != NULL)
 86             {
 87                 r->left = sk2.top();
 88                 sk2.pop();
 89                 r->right = NULL;
 90             }
 91             else if (p->left != NULL && p->right == NULL)
 92             {
 93                 r->left = NULL;
 94                 r->right = sk2.top();
 95                 sk2.pop();
 96             }
 97             else
 98             {
 99                 r->left = sk2.top();
100                 sk2.pop();
101                 r->right = sk2.top();
102                 sk2.pop();
103             }
104             sk2.push(r);
105         }
106     }
107     return sk2.top();
108 }
109 int main(int argc, char **argv)
110 {
111     TreeNode *root;
112     TreeNode n1(1);
113     TreeNode n2(2);
114     TreeNode n3(3);
115     TreeNode n4(4);
116     TreeNode n5(5);
117     TreeNode n6(6);
118     TreeNode n7(7);
119     TreeNode n8(8);
120     n1.left = &n2;
121     n1.right = &n3;
122     n2.left = &n4;
123     n2.right = &n5;
124     n3.left = &n6;
125     n3.right = &n7;
126     n4.left = &n8;
127     root = &n1;
128     TreeNode *result = postorderNR(root);
129 
130     getchar();
131     return 0;
132 }

二叉树生成镜像,布布扣,bubuko.com

二叉树生成镜像

标签:style   blog   color   os   io   re   c   div   

原文地址:http://www.cnblogs.com/liuzhijiang123/p/3868383.html

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