leetCode-Construct Binary Tree from Preorder and Inorder Traversal

来源:互联网 发布:惠普win10 网络唤醒 编辑:程序博客网 时间:2024/06/02 05:07

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

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

Solution:

//利用先序序列和中序序列构建二叉树,注意一下用map保存中序序列中值对应的位置,使找根节点位置的效率更高就可以了。如果不太清楚的话,可以看看这篇博文http://blog.csdn.net/bbs375/article/details/52745107/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */class Solution {    public TreeNode buildTree(int[] preorder, int[] inorder) {        Map<Integer,Integer> map = new HashMap<Integer,Integer>();        for(int i = 0;i < inorder.length;i++){            map.put(inorder[i],i);        }        return pre_in_createTree(preorder,0,preorder.length - 1,inorder,0,inorder.length - 1,map);    }    TreeNode pre_in_createTree(int[]preorder,int prestart,int preend,int[]inorder,int instart,int inend,Map<Integer,Integer>map){        if(prestart > preend || instart > inend){            return null;        }        TreeNode node = new TreeNode(preorder[prestart]);        int index = map.get(preorder[prestart]);        int numsLeft = index - instart;        node.left = pre_in_createTree(preorder,prestart + 1,prestart + numsLeft,inorder,instart,index - 1,map);        node.right = pre_in_createTree(preorder,prestart + numsLeft + 1,preend,inorder,index + 1,inend,map);        return node;    }}
阅读全文
0 0
原创粉丝点击