2016/11/3 1003. 二叉树后序遍历

来源:互联网 发布:微信端口 编辑:程序博客网 时间:2024/06/11 16:09

思路:http://www.cnblogs.com/fzhe/archive/2013/01/07/2849040.html

根据二叉树的前序和中序得到后序,只需要在中序中找到与前序第一个相同的节点值,即根节点,然后把它分为左右子树递归即可。左子树递归时前序遍历需要去掉第一个,右子树递归时则两个序列都要去掉根节点及其左边的内容。

#include <iostream>  #include <fstream>  #include <string>  using namespace std;struct TreeNode{  struct TreeNode* left;  struct TreeNode* right;  char  elem;};void BinaryTreeFromOrderings(char* inorder, char* preorder, int length){  if(length == 0)    {      //cout<<"invalid length";      return;    }  TreeNode* node = new TreeNode;//Noice that [new] should be written out.  node->elem = *preorder;  int rootIndex = 0;  for(;rootIndex < length; rootIndex++)    {      if(inorder[rootIndex] == *preorder)      break;    }  //Left  BinaryTreeFromOrderings(inorder, preorder +1, rootIndex);  //Right  BinaryTreeFromOrderings(inorder + rootIndex + 1, preorder + rootIndex + 1, length - (rootIndex + 1));  cout<<node->elem<<endl;  return;}int main(int argc, char* argv[]){    printf("Hello World!\n");    char* pr="GDAFEMHZ";    char* in="ADEFGHMZ";      BinaryTreeFromOrderings(in, pr, 8);    printf("\n");    return 0;}


0 0
原创粉丝点击