将二叉树PreOrder, inOrder序列化后,再恢复树形结构

来源:互联网 发布:股市热点追踪软件 编辑:程序博客网 时间:2024/05/16 10:36
/*you are given a system of passing binary trees among 2 pplStep1: convert the tree to preorder and inorder stringsStep2:send those strings to the intended personStep3:get back tree from the stringswhats your strategy of testing?write various test scenarios.---10 marks*/#include <iostream>char pre[7];char in[7];int cnt = 0;struct node{char data;node* left;node* right;node(int eData, node* eLeft, node* eRight){data = eData;left = eLeft;right = eRight;}};void preOrder(node* n){if (!n)return;pre[cnt++] = n->data;preOrder(n->left);preOrder(n->right);};void inOrder(node* n){if (!n)return;inOrder(n->left);in[cnt++] = n->data;inOrder(n->right);};node* restoreTree(int preLeft, int preRight, int inLeft, int inRight){if (preLeft < preRight){char curData = pre[preLeft];int i = inLeft;for (; i <= inRight; i++){if (in[i] == curData)break;}int num = i - inLeft;node* curNode = new node(curData, NULL, NULL);curNode->left = restoreTree(preLeft + 1, preLeft + num, inLeft, i - 1);curNode->right = restoreTree(preLeft + num + 1, preRight, i + 1, inRight);return curNode;}else if (preLeft == preRight)return new node(pre[preLeft], NULL, NULL);};int main(){node* n6 = new node('G', NULL, NULL);node* n5 = new node('D', n6, NULL);node* n4 = new node('E', NULL, NULL);node* n3 = new node('B', n5, n4);node* n2 = new node('F', NULL, NULL);node* n1 = new node('C', n2, NULL);node* n0 = new node('A', n3, n1);cnt = 0;preOrder(n0);cnt = 0;inOrder(n0);node* root = restoreTree(0, 6, 0, 6);return 0;}

原创粉丝点击