栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

剑指Offer07. 重建二叉树

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指Offer07. 重建二叉树

剑指Offer07. 重建二叉树
题目描述

输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

示例 1:

Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]

示例 2:

Input: preorder = [-1], inorder = [-1]
Output: [-1]

限制:

0 <= 节点个数 <= 5000

JAVA代码
递归方法

参考了天勤书内的解法。

**设计思想:**先序遍历序列中第一个元素x即为树的根结点数值。在中序遍历中找到x,利用x将中序遍历的数组分为了两个子序列,左边序列构成树的左子树,右边序列构成树的右子树,再对左右两个子序列用同样的方法处理,直到处理的子序列只剩下一个元素时,二叉树构造完成。

class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        int n = preorder.length;
        TreeNode node = createTree(preorder,inorder,0,n-1,0,n-1);
        return node;
    }

	//构建二叉树
    public TreeNode createTree(int[] preorder, int[] inorder,int L1,int R1,int L2,int R2){
        TreeNode node;
        int i;
        if(L1>R1){
            return null;
        }
        node = new TreeNode();
        node.left=node.right=null;
        for(i = L2;i<=R2;++i){
            if(inorder[i]==preorder[L1]){
                break;
            }
        }
        node.val = inorder[i];
        node.left = createTree(preorder,inorder,L1+1,L1+i-L2,L2,i-1);
        node.right = createTree(preorder,inorder,L1+i-L2+1,R1,i+1,R2);
        return node;
    }
}

官方–迭代方法

迭代即非递归方法。
思路可以二叉树遍历的非递归实现作为理论基础。
二叉树的非递归方法感觉很难理解,故待后续有学习需求再来这里补充。
暂时感觉递归够用。看不懂所以不纠结浪费时间了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004115.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号