最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

天天时讯:剑指 Offer 07. 重建二叉树(java解题)

来源:博客园


(资料图片仅供参考)

目录
  • 1. 题目
  • 2. 解题思路
    • 个人思路
  • 3. 数据类型功能函数总结
  • 4. java代码

1. 题目

输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。

假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

示例 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

作者:Krahets链接:https://leetcode.cn/leetbook/read/illustration-of-algorithm/99lxci/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2. 解题思路

个人思路

每次查找前序遍历的节点0作为root节点,在中序遍历中查找root节点所在位置,根据位置下标i将中序遍历数组分为左右两个左右子数组[0,i-1][i+1,len-1],对前序遍历数组,根据左右子树组的长度相同同样进行分组划分,然后递归调用函数,处理左右子树。

3. 数据类型功能函数总结

//数组int[] array_name=new int[len];//数组定义int len=array_name.length;//获得数组长度

4. java代码

/** * 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) {        if(preorder.length==0&&inorder.length==0){//特殊情况,也是递归的边界条件            return null;        }        else{            //构造根节点            int root_val=preorder[0];//前序遍历的首元素为根节点的值            TreeNode root=new TreeNode(root_val);//创建根节点            //在中序遍历数组中查找根节点位置            int find_root=0;            int i=0;            for(i=0;i

关键词: