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

代码随想录:从中后/中前遍历序列构造二叉树

106. 从中序与后序遍历序列构造二叉树

用分治思想,后序遍历是左右中,中序遍历是左中右,后序遍历的最后一个元素就是根节点,

在中序遍历中找到它的位置,它前面的为左子树,后面的为右子树,并能计算左右子树结点个数,算下标差即可,然后递归算每一棵子树,当成一棵树来处理,中序遍历对应前几个结点与后序遍历前几个结点为一棵树上的结点。

/*** 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 {HashMap<Integer,Integer> m=new HashMap<>();int[] post;public TreeNode buildTree(int[] inorder, int[] postorder) {
for(int i=0;i<inorder.length;i++)
{m.put(inorder[i],i);
}post=postorder;return tree(0,inorder.length-1,0,postorder.length-1);}TreeNode tree (int inbegin,int inend,int pbegin ,int pend){if(inbegin>inend||pbegin>pend)return null;TreeNode cur=new TreeNode(post[pend]);int idx=m.get(post[pend]);cur.left=tree(inbegin,idx-1,pbegin,pbegin+idx-inbegin-1);cur.right=tree(idx+1,inend,pbegin+idx-inbegin,pend-1);return cur;}
}

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

类似

/*** 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 {HashMap<Integer,Integer> m= new HashMap<>();int[] pre;public TreeNode buildTree(int[] preorder, int[] inorder) {for(int i=0;i<inorder.length;i++)m.put(inorder[i],i);pre=preorder;return traval(0,inorder.length-1,0,preorder.length-1);}TreeNode traval(int inbegin,int inend,int pbegin,int pend)
{if (inbegin>inend||pbegin>pend)return null;TreeNode cur=new TreeNode(pre[pbegin]);int idx=m.get(pre[pbegin]);cur.left=traval(inbegin,idx-1,pbegin+1,pbegin+idx-inbegin);cur.right=traval(idx+1,inend,pbegin+idx-inbegin+1,pend);return cur;
}
}

http://www.lryc.cn/news/472825.html

相关文章:

  • 2-134 基于matlab的图像边缘检测
  • 【Java并发编程】线程池详解
  • ThingsBoard规则链节点:GPS Geofencing Events节点详解
  • Jmeter基础篇(19)JSR223预处理器
  • 通过js控制css变量
  • Docker:容器化和虚拟化
  • OpenSSL
  • CSS 常见选择器
  • Linux使用Dockerfile部署Tomcat以及jdk
  • LC20. 有效的括号
  • 基于springboot企业微信SCRM管理系统源码带本地搭建教程
  • 【MTMSA】不确定缺失模态下基于情态翻译的多模态情感分析
  • 【php常用公共函数】php获取指定时间段中有那几年并输出年份的起始时间和结束时间
  • CTF-PWN: 什么是_IO_FILE?
  • 前端八股文第二篇
  • springboot汽车保修服务管理系统-计算机毕业设计源码00052
  • 分布式架构搭建博客网站
  • python-opencv给图片或视频去水印
  • 免费送源码:Java+ssm+Springboot Springboot手办定制销售系统 计算机毕业设计原创定制
  • 卡夫卡的使用
  • mac|maven项目在idea中连接redis
  • Python基础学习------第一天
  • MySQL的SQL语句之触发器和存储过程的应用
  • 【MD5】密码加密之加盐算法
  • 服务器虚拟化
  • 贪心算法理论基础和习题【算法学习day.17】
  • 爬虫ip技术未来发展趋势
  • 推荐一款功能强大的文字处理工具:Atlantis Word Processor
  • 语言≠思维,大模型学不了推理:一篇Nature让AI社区炸锅了
  • Ubuntu 安装 npm