Construct Binary Tree from Preorder and Inorder Traversal

来源:互联网 发布:ibm公司软件 编辑:程序博客网 时间:2024/06/07 02:44

Question

这里写图片描述

This may not be a tough problem,but that rack my brain by a while…
So I want to record it down for myself.

Code

  struct TreeNode {      int val;      struct TreeNode *left;      struct TreeNode *right;  };/*   1.Take the preorder[0] as root for now;   2.Find the same node in inorder,get it's index;   3.Malloc as a new node;   4.Recursive:        The point that confused me is how to divide the preorder and inorder.At last,I know:the index of root you find is the boundary.That means how many nodes left the root in inorder is the same as how many nodes left in preorder.*/struct TreeNode* buildTreePreorderInorder(int* preorder, int preorderSize, int* inorder, int inorderSize) {    if(preorderSize<=0 || inorderSize<=0)        return NULL;        struct TreeNode *root=NULL;        int val = preorder[0];        int i=0;        for(;i<inorderSize && val!=inorder[i];++i);        if(i>=inorderSize)            return NULL;        root = (struct TreeNode*)malloc(sizeof(struct TreeNode));        root->val = val;        root->left = buildTreePreorderInorder(&preorder[1],i,inorder,i);        root->right = buildTreePreorderInorder(&preorder[i+1],preorderSize-1-i,&inorder[i+1],inorderSize-i-1);        return root;}//struct TreeNode* buildTreeInorderPostorder(int* inorder, int inorderSize, int* postorder, int postorderSize) {    if(inorderSize<=0 || postorderSize<=0)        return NULL;    struct TreeNode *root = NULL;    int val = postorder[postorderSize-1];    int i = 0;    for(;i<inorderSize && val!=inorder[i];++i);    if(i>=inorderSize)        return NULL;    root = (struct TreeNode*)malloc(sizeof(struct TreeNode));    root->val = val;    root->left = buildTreeInorderPostorder(inorder,i,postorder,i);    root->right = buildTreeInorderPostorder(&inorder[i+1],inorderSize-i-1,&postorder[i],postorderSize-1-i);    return root;}
0 0