Guest User

Untitled

a guest
Apr 22nd, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.13 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <vector>
  4. #include <queue>
  5. #include <string.h>
  6.  
  7. using namespace std;
  8.  
  9. struct TreeNode{
  10. int val;
  11. struct TreeNode *left;
  12. struct TreeNode *right;
  13.  
  14. // TreeNode(int x) : val(x), left(NULL), right(NULL){}
  15. };
  16. void TreeTraversePre(TreeNode* root,vector<int> &vec_Result);
  17.  
  18.  
  19. class TreePrinter {
  20. public:
  21. vector<vector<int> > printTree(TreeNode* root) {
  22.  
  23. vector<vector<int> > vec_Print;
  24. queue<TreeNode*> que_Temp;
  25. if(NULL == root)
  26. return vec_Print;
  27.  
  28. TreeNode *last;
  29. TreeNode *nlast;
  30.  
  31. last = root;
  32. nlast = NULL;
  33. que_Temp.push(last);
  34.  
  35. vector<int> vec_Temp;
  36.  
  37. while(que_Temp.size() != 0)
  38. {
  39.  
  40. if(NULL != que_Temp.front()->left)
  41. {
  42. que_Temp.push(que_Temp.front()->left) ;
  43. nlast = (que_Temp.front()->left);
  44. }
  45.  
  46. if(NULL != que_Temp.front()->right)
  47. {
  48. que_Temp.push(que_Temp.front()->right);
  49. nlast = (que_Temp.front()->right);
  50. }
  51.  
  52. vec_Temp.push_back(que_Temp.front()->val);
  53.  
  54. if(que_Temp.front() == last)
  55. {
  56. last = nlast;
  57. vec_Print.push_back(vec_Temp);
  58. vec_Temp.clear();
  59. }
  60.  
  61. que_Temp.pop();
  62.  
  63. }
  64.  
  65. return vec_Print;
  66. }
  67. };
  68.  
  69.  
  70. //前后中 序,就是遍历到跟的时间为 开始 最后 中间
  71. //1. 前序遍历,访问的顺序为根->左->右;
  72. void TreeTraversePre(TreeNode* root,vector<int> &vec_Result)
  73. {
  74. if(NULL == root) return;
  75.  
  76. vec_Result.push_back(root->val);
  77.  
  78.  
  79. if(NULL != root->left)
  80. {
  81. // vec_Result.push_back(root->left->val);
  82. TreeTraversePre(root->left, vec_Result);
  83. }
  84.  
  85. if(NULL != root->right)
  86. {
  87. // vec_Result.push_back(root->right->val);
  88. TreeTraversePre(root->right, vec_Result);
  89. }
  90. return;
  91. }
  92.  
  93. //2. 中序遍历,访问的顺序为左->根->右;
  94. void TreeTraverseMid(TreeNode* root,vector<int> &vec_Result)
  95. {
  96. if(NULL == root) return;
  97.  
  98.  
  99.  
  100. if(NULL != root->left)
  101. {
  102. // vec_Result.push_back(root->left->val);
  103. TreeTraverseMid(root->left, vec_Result);
  104. }
  105.  
  106. vec_Result.push_back(root->val);
  107.  
  108.  
  109. if(NULL != root->right)
  110. {
  111. // vec_Result.push_back(root->right->val);
  112. TreeTraverseMid(root->right, vec_Result);
  113. }
  114.  
  115.  
  116. return;
  117. }
  118.  
  119.  
  120. //3. 后序遍历,访问的顺序为左->右->根;
  121. void TreeTraverseBeh(TreeNode* root,vector<int> &vec_Result)
  122. {
  123. if(NULL == root) return;
  124.  
  125.  
  126.  
  127. if(NULL != root->left)
  128. {
  129. // vec_Result.push_back(root->left->val);
  130. TreeTraverseBeh(root->left, vec_Result);
  131. }
  132.  
  133.  
  134.  
  135. if(NULL != root->right)
  136. {
  137. // vec_Result.push_back(root->right->val);
  138. TreeTraverseBeh(root->right, vec_Result);
  139. }
  140.  
  141. vec_Result.push_back(root->val);
  142.  
  143. return;
  144. }
  145.  
  146.  
  147. struct TreeNode** CreateTree()
  148. {
  149. struct TreeNode* stTreeNode[9];
  150. // stTreeNode = (struct TreeNode** ) malloc(sizeof(struct TreeNode*));
  151. // memset(stTreeNode, 0, sizeof(struct TreeNode*));
  152.  
  153. for(int i = 0; i<9; i++)
  154. {
  155. stTreeNode[i] = (struct TreeNode*)malloc(sizeof(struct TreeNode));
  156. memset(stTreeNode[i], 0, sizeof(struct TreeNode));
  157.  
  158. stTreeNode[i]->val = i+65;
  159. printf("i:%d\n",stTreeNode[i]->val);
  160.  
  161. }
  162. stTreeNode[8]->val = 'K';
  163. printf("00000\n");
  164.  
  165. for(int i = 0; i<9; i++)
  166. {
  167. printf("i:%d\n",stTreeNode[i]->val);
  168. }
  169.  
  170.  
  171. stTreeNode[0]->left = stTreeNode[1];
  172.  
  173. stTreeNode[1]->right = stTreeNode[2];
  174.  
  175.  
  176. stTreeNode[2]->left = stTreeNode[3];
  177.  
  178. stTreeNode[0]->right = stTreeNode[4];
  179. stTreeNode[4]->right = stTreeNode[5];
  180. stTreeNode[5]->left = stTreeNode[6];
  181. stTreeNode[6]->left = stTreeNode[7];
  182. stTreeNode[6]->right = stTreeNode[8];
  183.  
  184.  
  185. return stTreeNode;
  186. }
  187.  
  188.  
  189. int main(int argc, char* argv[])
  190. {
  191. // struct TreeNode** stTreeNode;
  192. // stTreeNode = CreateTree();
  193. struct TreeNode* stTreeNode[9];
  194. // stTreeNode = (struct TreeNode** ) malloc(sizeof(struct TreeNode*));
  195. // memset(stTreeNode, 0, sizeof(struct TreeNode*));
  196.  
  197. for(int i = 0; i<9; i++)
  198. {
  199. stTreeNode[i] = (struct TreeNode*)malloc(sizeof(struct TreeNode));
  200. memset(stTreeNode[i], 0, sizeof(struct TreeNode));
  201.  
  202. stTreeNode[i]->val = i+65;
  203. printf("i:%d\n",stTreeNode[i]->val);
  204.  
  205. }
  206. stTreeNode[8]->val = 'K';
  207. printf("00000\n");
  208.  
  209. for(int i = 0; i<9; i++)
  210. {
  211. printf("i:%c\n",stTreeNode[i]->val);
  212. }
  213.  
  214.  
  215. stTreeNode[0]->left = stTreeNode[1];
  216.  
  217. stTreeNode[1]->right = stTreeNode[2];
  218.  
  219.  
  220. stTreeNode[2]->left = stTreeNode[3];
  221.  
  222. stTreeNode[0]->right = stTreeNode[4];
  223. stTreeNode[4]->right = stTreeNode[5];
  224. stTreeNode[5]->left = stTreeNode[6];
  225. stTreeNode[6]->left = stTreeNode[7];
  226. stTreeNode[6]->right = stTreeNode[8];
  227.  
  228.  
  229.  
  230. printf("root:%c\n",stTreeNode[0]->val);
  231. struct TreeNode* root;
  232. root = stTreeNode[0];
  233. // for(int i = 0; i<9; i++)
  234. {
  235. // printf("len:%d\n",strlen((char*)(stTreeNode[i]->val)));
  236. // printf("Val:%c\n",stTreeNode[i]->val);
  237.  
  238. // printf("i:%lu\n",sizeof(stTreeNode[i]));
  239. }
  240.  
  241. vector<int> vec_Result;
  242.  
  243.  
  244. TreeTraversePre(root,vec_Result);
  245.  
  246. printf("TreeTraversePre\n");
  247. vector<int>::iterator it;
  248. for(it = vec_Result.begin(); it != vec_Result.end();it++)
  249. {
  250. printf("Val:%c\n",*it);
  251. }
  252. vec_Result.clear();
  253.  
  254. TreeTraverseMid(root,vec_Result);
  255.  
  256. printf("TreeTraverseMid\n");
  257. // vector<int>::iterator it;
  258. for(it = vec_Result.begin(); it != vec_Result.end();it++)
  259. {
  260. printf("Val:%c\n",*it);
  261. }
  262.  
  263. vec_Result.clear();
  264.  
  265. TreeTraverseBeh(root,vec_Result);
  266.  
  267. printf("TreeTraverseBeh\n");
  268. // vector<int>::iterator it;
  269. for(it = vec_Result.begin(); it != vec_Result.end();it++)
  270. {
  271. printf("Val:%c\n",*it);
  272. }
  273. }
Add Comment
Please, Sign In to add comment