Construct Binary Tree from Preorder and Inorder Traversal

来源:互联网 发布:178数据库7.0 编辑:程序博客网 时间:2024/06/06 10:54

Given preorder and inorder traversal of a tree, construct the binary tree.

Note:
You may assume that duplicates do not exist in the tree.


思路:

preorder: current, left, right;

inorder: left, current, right;

由preorder来确定current,然后搜索inorder,找到current,左边的即为left,右边的即为right,然后计算两个left,right 区间,然后recursion;

/**  * Definition for a binary tree node.  * public class TreeNode {  *     int val;  *     TreeNode left;  *     TreeNode right;  *     TreeNode(int x) { val = x; }  * }  */ public class Solution {     public TreeNode buildTree(int[] preorder, int[] inorder) {         if(preorder == null || inorder == null || preorder.length != inorder.length) return null;         return build(preorder, 0, preorder.length-1, inorder, 0, inorder.length-1);     }          public TreeNode build(int[] preorder, int pstart, int pend, int[] inorder, int istart, int iend){         if(pstart>pend || istart>iend){             return null;         }                  TreeNode node = new TreeNode(preorder[pstart]);         int index = 0;         for(int i=istart; i<=iend; i++){             if(inorder[i] == preorder[pstart]){                 index = i;                 break;             }         }         node.left = build(preorder, pstart+1, pstart+index-istart, inorder, istart, index-1);         node.right = build(preorder, pstart+index-istart+1, pend, inorder, index+1, iend);         return node;     } }


0 0