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

思路: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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值