LeetCode 105

来源:互联网 发布:上古时代网络用语 编辑:程序博客网 时间:2024/05/01 00:52

原题:

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

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



题意给你一个前序遍历和中序遍历的数组,要求构建二叉树




代码和思路

前序遍历:就是先访问 根节点------左子树------右子树      所以前序遍历数组的第一个数就是根节点。

中序遍历:就是先访问 左子树------根节点------右子树      根节点在中间,左边是左子树,右边是右子树

     4   /   \  2     7 / \   / \1   3 6   9
上面的二叉树为例子:

前序遍历的结果是:4213769

中序遍历的结果是:1234679  可以看到4在最中间,2在13中间,7在69中间。这样就用迭代即可

/** * 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) {        return recursion(0,0,inorder.length-1,preorder,inorder);    }        private TreeNode recursion(int preStart,int inStart,int inEnd,int[] preorder, int[] inorder){        if(preStart > preorder.length-1 || inStart > inEnd){            return null;        }        //根据前序遍历找出根节点        TreeNode root = new TreeNode(preorder[preStart]);        int inIndex = 0;        //找出根节点在中序遍历中的位置,用inIndex记录        for(int i = inStart;i<=inEnd;i++){            if(inorder[i]==root.val){                inIndex = i;            }        }        //左树是中序数组的 开头(inStart) 到 根节点(inIdex-1)        root.left = recursion(preStart+1,inStart,inIndex-1,preorder,inorder);        //右树是中序数组的 根节点(inIdex+1)到 结尾(inEnd)        root.right = recursion(preStart+inIndex-inStart+1,inIndex+1,inEnd,preorder,inorder);        return root;    }}



原创粉丝点击