英伟达在线程序测评——后续遍历二叉树的序列转前序输出

来源:互联网 发布:淘宝被投诉低价竞争 编辑:程序博客网 时间:2024/05/21 08:51

题目:

题目比较简单吧,总之是利用栈先还原树,然后前序遍历即可

/*Sample code to read in test cases:*/#include <iostream>#include <fstream>#include <string>#include <cctype>#include <cassert>#include <stdlib.h>#include<vector>#include<stack>#include<string.h>#include<stdio.h>using namespace std;struct Node{vector<Node*> children;int flag;};void preTravese(Node* head,vector<int>* result){if(head==NULL)return;result->push_back(head->flag);int i;for(i=(head->children.size())-1;i>=0;i--)preTravese((head->children)[i],result);}int main(){fstream file;//char sysInputFile[] = "{sysFileUrl}";char sysInputFile[] = "C:\\Users\\jiangkai\\Desktop\\d.txt";file.open(sysInputFile);string lineBuffer;while (!file.eof()){       getline(file, lineBuffer);       if (lineBuffer.length() == 0)           continue; //ignore all empty lines       else        {   //do something here   stack<Node*> myStack;   char* str = new char[lineBuffer.size()+1];   strcpy(str,lineBuffer.c_str());   char* element = strtok(str,",");   while(element!=NULL)   {   int index = 0;   int flag = 0;   int count=0;   while(element[index]!='(')   {   flag *= 10;   flag += element[index]-'0';   index++;   }   index++;   while(element[index]!=')')   {   count *= 10;   count += element[index]-'0';   index++;   }   Node* newNode = new Node;   newNode->flag = flag;      if(count!=0)   for(int k=0;k<count;k++)   {   Node* current = myStack.top();   myStack.pop();   (newNode->children).push_back(current);   }myStack.push(newNode);element = strtok(NULL,",");   }   Node* head = myStack.top();   vector<int> result;   preTravese(head,&result);   int ii;   cout<<result[0];   for(ii=1;ii<result.size();ii++)   cout<<","<<result[ii];   cout<<endl;       }}return 0;}


原创粉丝点击