当前位置: 首页 > news >正文

学习网站大全千图app的优势

学习网站大全,千图app的优势,开公司要多少钱才能注册,网站开发方倍工作室105. 从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,…

105. 从前序与中序遍历序列构造二叉树

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

示例 1:
输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
输出: [3,9,20,null,null,15,7]

示例 2:
输入: preorder = [-1], inorder = [-1]
输出: [-1]

提示:
1 <= preorder.length <= 3000
inorder.length == preorder.length
-3000 <= preorder[i], inorder[i] <= 3000
preorder 和 inorder 均 无重复 元素
inorder 均出现在 preorder
preorder 保证 为二叉树的前序遍历序列
inorder 保证 为二叉树的中序遍历序列

题解:

我们使用递归分治思想,因对于所给中序和前序,可通过前序序列确定第一个节点,再通过此节点在中序序列中的位置进而确定左右子树各自的中序序列,之后再通过其确定左右子树各自的前序序列,以此可进行递归处理;
同时注意某子树的中序序列长度和前序序列长度必为相等,可依据此性质确定递归时inorder数组和preorder数组下标起点终点该如何选择;
递归即对每个子树的中序和后序序列分别按照上述思想处理即可;

代码:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/// 贪心法 失败
// class Solution {
//     public TreeNode buildTree(int[] preorder, int[] inorder) {
//         // 哈希表维护中序顺序,从而判断两元素之间方向关系
//         Map<Integer,Integer> map = new HashMap<>(); 
//         for(int i=0;i<inorder.length;i++){
//             map.put(inorder[i],i);
//         }//         // 建造节点依靠先序,中序作为验证判断,从而选择l或r方向延申
//         // 初始化第一个位置,因其为确定且唯一
//         TreeNode res = new TreeNode(preorder[0]);
//         TreeNode temp = res;//         // 其余元素需要加入中序判断
//         for(int i=1;i<preorder.length;i++){
//             int level = map.get(preorder[i]);
//             if(level > map.get(temp.val)){
//                 // 每次都叫node_new,但是分配区域不会回收
//                 // 只是名字被另一片区域剥夺,但因使用指针已经连接好,故不会混淆
//                 TreeNode node_new = new TreeNode(preorder[i]);
//                 temp.right = node_new;
//                 temp = temp.right;
//             }
//             else{
//                 // 同上 区别是若遍历到的节点在temp右方则必定temp加入此点后向right移动
//                 // 若在temp左方 需等待 因可能右方还有节点 
//                 // 当然也存在右方无节点情况 此时则需要判断下一节点是否仍为temp的left
//                 // 若是 则temp向left移动
//                 if(temp.left == null){
//                     TreeNode node_new = new TreeNode(preorder[i]);
//                     temp.left = node_new;
//                 }
//                 else{
//                     temp = temp.left;
//                     // 回溯未处理情况
//                     i--;
//                 } 
//             }
//         }//         return res;
//     }
// }// 递归法
class Solution {Map<Integer,Integer> map = new HashMap<>(); public TreeNode buildTree(int[] preorder, int[] inorder) {// 哈希表维护中序顺序,从而判断两元素之间方向关系for(int i=0;i<inorder.length;i++){map.put(inorder[i],i);}return ToBuildTree(preorder,inorder,0,preorder.length-1,0,inorder.length-1);}public TreeNode ToBuildTree(int[] preorder,int[] inorder,int preStart,int preEnd,int inStart,int inEnd){// 中序序列和先序序列长度必为相等,因此只需判断一个即可if(preStart > preEnd)return null;   // 对于递归设置一个终止条件即可// 根节点可立刻确定TreeNode res = new TreeNode(preorder[preStart]);// 此根在中序遍历中下标位置int inorder_pre = map.get(preorder[preStart]);// 运用每个子树的中序序列和其对应的前序序列长度相等的性质,可推断出左子树和右子树前序序列分界点int placeLeft = inorder_pre-1 - inStart;res.left = ToBuildTree(preorder,inorder,preStart+1,preStart+1+placeLeft,inStart,inorder_pre-1);int placeRight = inEnd - (inorder_pre+1);  res.right = ToBuildTree(preorder,inorder,preEnd-placeRight,preEnd,inorder_pre+1,inEnd);return res;}
}

结果:

在这里插入图片描述

http://www.yayakq.cn/news/885652/

相关文章:

  • 建设网站有哪几种方式开发一个app需要多少钱?
  • 唐山市路桥建设有限公司网站中山门户网站制作在哪里买
  • 天津网站建设招聘西宁网站建设哪家强
  • 北京市公司网站制作Wordpress标题颜色怎么修改
  • 有没有做粤菜的网站网络设计报告的研究意义
  • 网站建设 佛山大悟网站建设
  • 跨境商城网站制作试用网站开发
  • 做3d效果的网站环球影城客户电话
  • 传统网站建设网页设计模板html代码教程
  • 网站开发技术报告模板会做网站开发 但是不会二次开发
  • 建设网站对公司起什么作用是什么意思平面设计有哪些工作岗位
  • 怎样查别人网站的外链制作二维码免费软件
  • 互联网门户网站是什么企业做网站分哪几种
  • 云南网站设计方案什么源码做有趣的网站
  • 网站建设公司发展理念网站切图规范
  • 建设工程施工合同范本哪个网站wordpress图片转移
  • 做营销网站seo做ppt在哪些网站可以卖钱
  • 织梦网站怎样做子域名外贸客户开发系统
  • 网站开发的形式南宁商城网站推广公司
  • 软件开发工资高吗抖音seo搜索优化
  • 银川网站建设哪家优wordpress跑一亿数据
  • 图片网站怎么做wordpress 显示指定分类
  • 如何做视频网站的广告推广咸宁建设网站
  • 郴州住房和城乡建设部网站wordpress tinymce advanced
  • 企业网站建设方案价格上海专业网站建设报价
  • mvc网站建设设计报告建筑招聘网站哪个好
  • 佛山顺德网站建设价格网app下载
  • 做网站开发需要学哪些东西做模特网站
  • 哈尔滨网站备案手续企业外贸网站
  • 哈尔滨建设工程信息网站大连开发区招聘信息