J07、重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:

看见建二叉树的题要立马反应到递归求解。本题中前序遍历数组中的第一个值就是根节点,使用该值将中序遍历数组分为2部分,然后递归建树。

public TreeNode buildTree(int[] preorder, int[] inorder) {
        if(preorder.length == 0 || inorder.length == 0)
            return null;
        TreeNode root = new TreeNode(preorder[0]);
        
        //找到根节点在中序遍历数组中的位置
        int i=0;
        while(i<inorder.length&&preorder[0]!=inorder[i])
            i++;
        root.left = buildTree(Arrays.copyOfRange(preorder, 1, i + 1),
                Arrays.copyOfRange(inorder, 0, i));
        root.right = buildTree(Arrays.copyOfRange(preorder,i + 1, preorder.length),
                Arrays.copyOfRange(inorder, i + 1, inorder.length));
        
        return root; 
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树形结构 在前面章节中介绍到的数据结构,都为线性结构,比如链表,数组,队列等,都属于线性结构,类似于通过一根线串在...
    ducktobey阅读 1,284评论 0 0
  • 树的定义与基本术语   树型结构是一类重要的非线性数据结构,其中以树和二叉树最为常用,是以分支关系定义的层次结构。...
    java技术分享师阅读 1,136评论 0 1
  • 我的CSDN: ListerCi我的简书: 东方未曦 一、二叉树与递归 二叉树与递归有着千丝万缕的联系,二叉树在定...
    东方未曦阅读 6,454评论 3 9
  • 树的概念与基本术语 树是若干结点的集合,是由唯一的根和若干棵互不相交的子树组成的。树的概念是递归的,即在树的定义中...
    桔子满地阅读 1,506评论 0 2
  • 笔记: 在知道“怎样做”之前,要知道“为什么要这样做”……有助于理解孩子的不良行为。 “赢了”孩子是用控制和惩罚的...
    觉知之光阅读 303评论 0 1