描述: |
二叉树的前序、中序、后序遍历的定义:
|
题目类别: |
树 |
难度: |
中级 |
运行时间限制: |
无限制 |
内存限制: |
无限制 |
阶段: |
入职前练习 |
输入: |
两个字符串,其长度n均小于等于26。
|
输出: |
输入样例可能有多组,对于每组测试样例,
|
样例输入: |
ABC BAC FDXEAG XDEFAG |
样例输出: |
BCA XEDGAF |
代码:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
struct TreeNode
{
char val;
TreeNode *left;
TreeNode *right;
TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};
TreeNode *createTree(vector<char> &preorder,int preBeg,int preEnd, vector<char> &inorder,int inBeg,int inEnd)
{
if(preBeg > preEnd)
return NULL;
TreeNode *root = new TreeNode(preorder[preBeg]);
int i = inBeg;
while(i < inEnd && inorder[i] != preorder[preBeg])
{
i++;
}
int len = i - inBeg;
root->left = createTree(preorder,preBeg+1,preBeg+len,inorder,inBeg,i-1);
root->right = createTree(preorder,preBeg+len+1,preEnd,inorder,i+1,inEnd);
return root;
}
TreeNode *buildTree(vector<char> &preorder, vector<char> &inorder)
{
if(preorder.empty() || inorder.empty())
return NULL;
return createTree(preorder, 0 , preorder.size()-1 , inorder , 0 , inorder.size()-1);
}
void postOrderTraverse(TreeNode *root)
{
if(root == NULL)
return;
postOrderTraverse(root->left);
postOrderTraverse(root->right);
cout<<root->val;
}
int main ()
{
string str1 , str2;
vector<char> preorder , inorder;
while(cin >> str1 >> str2)
{
for(int i = 0 ; i < str1.size() ; i++)
{
preorder.push_back(str1[i]);
}
for(int i = 0 ; i < str2.size() ; i++)
{
inorder.push_back(str2[i]);
}
TreeNode *root = buildTree(preorder , inorder);
postOrderTraverse(root);
cout<<endl;
preorder.clear();
inorder.clear();
}
return 0;
}