首页 > 代码库 > 二叉树生成镜像
二叉树生成镜像
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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。