在已知二叉树的前序遍历和中序遍历的情况下,求出了后序遍历。
那么,对称地,如果已知二叉树的后序遍历和中序遍历,如何求前序遍历呢?
其实思路与上文完全类似。
代码如下:
- // InPost2Pre.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- struct TreeNode
- {
- struct TreeNode* left;
- struct TreeNode* right;
- char elem;
- };
- TreeNode* BinaryTreeFromOrderings(char* inorder,char* postorder, int length)
- {
- if(length == 0)
- {
- return NULL;
- }
- //We have root then;
- TreeNode* node = new TreeNode;//Noice that [new] should be written out.
- node->elem = *(postorder+length-1);
- cout<<node->elem<<endl;
- int rootIndex = 0;
- for(;rootIndex <length; rootIndex++)
- {
- if(inorder[rootIndex] == *(postorder+length-1))
- break;
- }
- //在循环条件而非循环体完成了对变量值的改变。
- //Left
- node->left = BinaryTreeFromOrderings(inorder, postorder, rootIndex);
- //Right
- node->right = BinaryTreeFromOrderings(inorder + rootIndex + 1, postorder + rootIndex, length - (rootIndex+1));
- //node->right = *(postorder+length-2);
- return node;
- }
- int main(int argc,char* argv[])
- {
- printf("Hello World!\n");
- char* in="ADEFGHMZ";
- char* po="AEFDHZMG";
- BinaryTreeFromOrderings(in, po, 8);
- printf("\n");
- return 0;
- }
// InPost2Pre.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
struct TreeNode
{
struct TreeNode* left;
struct TreeNode* right;
char elem;
};
TreeNode* BinaryTreeFromOrderings(char* inorder, char* postorder, int length)
{
if(length == 0)
{
return NULL;
}
//We have root then;
TreeNode* node = new TreeNode;//Noice that [new] should be written out.
node->elem = *(postorder+length-1);
cout<<node->elem<<endl;
int rootIndex = 0;
for(;rootIndex <length; rootIndex++)
{
if(inorder[rootIndex] == *(postorder+length-1))
break;
}
//在循环条件而非循环体完成了对变量值的改变。
//Left
node->left = BinaryTreeFromOrderings(inorder, postorder, rootIndex);
//Right
node->right = BinaryTreeFromOrderings(inorder + rootIndex + 1, postorder + rootIndex, length - (rootIndex+1));
//node->right = *(postorder+length-2);
return node;
}
int main(int argc, char* argv[])
{
printf("Hello World!\n");
char* in="ADEFGHMZ";
char* po="AEFDHZMG";
BinaryTreeFromOrderings(in, po, 8);
printf("\n");
return 0;
}