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

设计网站企业网站建设公司联通最低套餐

设计网站企业网站建设公司,联通最低套餐,广告优化师加班严重,茶叶 企业 网站建设目录 一、二叉树理论知识 二、构造二叉树思路 2.1 构造二叉树流程(给定中序后序 2.2 整体步骤 2.3 递归思路 2.4 给定前序和后序 三、相关算法题目 四、易错点 一、二叉树理论知识 详见:代码随想录刷题day34|(二叉树篇)二…

目录

一、二叉树理论知识

二、构造二叉树思路

2.1 构造二叉树流程(给定中序+后序

2.2 整体步骤

2.3 递归思路

2.4 给定前序和后序

三、相关算法题目

四、易错点


一、二叉树理论知识

详见:代码随想录刷题day34|(二叉树篇)二叉树的递归遍历-CSDN博客

二、构造二叉树思路

2.1 构造二叉树流程(给定中序+后序

给定中序和后序的节点值构造唯一二叉树:

中序:左中右:9 3 15 20 7

后序:左右中:9 15 7 20 3

由后序可知:最后一个结点 3 一定为根节点                               9 15 7 20 3

由中序可知:左子树为 9 右子树为 15 20 7                                9 3 15 20 7

由后序可知:左子树的根节点为 9 (也只有唯一一个结点 9 )右子树的根节点为 20 

由中序可知:右子树的左节点为 15   右节点为 7

2.2 整体步骤

1.如果后序数组为空,则说明遍历结束;

2.后序数组最后一个元素为(根)结点元素;

3.在中序数组中寻找对应结点元素,作为切割点,分割左右子树;

4.切割中序数组,切成左右区间;

5.切割后序数组:根据中序数组中的左右区间,再去切割后序数组中的左右区间;

6.然后递归处理切割后的左区间和右区间;

2.3 递归思路

1.递归函数返回值和参数

返回构造好的根节点,参数:中序数组和后序数组;

2.终止条件

后序数组为空,返回为空,假设后序数组长度=中序数组长度,不考虑其他异常情况;

3.单层递归逻辑

处理特殊情况:如果后序数组长度为1,则说明这棵树只有一个结点,即为根节点又为叶子节点;

首先获取后序数组中最后一个结点的值val;

遍历中序数组,找到val所在的下标位置index;

根据index切割中序数组,得到左中序数组、右中序数组;

根据左中序数组的大小和右中序数组的大小来切割后序数组,得到左后序数组、右后序数组;

根据左中序和左后序递归处理左子树,右中序和右后序递归处理结点的右子树;

切数组的时候 注意区间的定义,左闭右开,左闭右闭

一定先切中序,分开左右,再去切后序,否则后序无法分开左右;

一定打日志 来找问题? debug?就是把每一步划分的数组打印出来看 printf

2.4 给定前序和后序

不可以

因为只能找出根节点,但是分不开左右区间,构造二叉树一定要有中序遍历的数组;

三、相关算法题目

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

class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) {return backtracking(inorder,postorder);}private TreeNode backtracking(int[] inorder, int[] postorder){if(postorder.length == 0 || inorder.length == 0){return null;}TreeNode root = new TreeNode();root.val = postorder[postorder.length - 1];if(postorder.length == 1){return root;}int index = 0;for(int i = 0;i < inorder.length;i++){if(inorder[i] == postorder[postorder.length - 1]){index = i;break;}}//切割中序数组 得到左中序数组int[] leftInorder = Arrays.copyOfRange(inorder,0,index);//得到右中序数组int[] rightInorder = Arrays.copyOfRange(inorder,index + 1,inorder.length);//切割后序数组 得到左后序数组int[] leftPostorder = Arrays.copyOfRange(postorder,0,leftInorder.length);//得到右后序数组int[] rightPostorder = Arrays.copyOfRange(postorder,leftInorder.length,postorder.length - 1);//递归处理左子树 根据左中序和左后序root.left = backtracking(leftInorder,leftPostorder);//递归处理右子树 根据右中序和右后序root.right = backtracking(rightInorder,rightPostorder);return root;}
}

四、易错点

1.判断后序数组和中序数组长度是否为0,要放在递归函数中,否则当左子树为空时,递归到下一层,即根结点的左子树时,后序数组已为空,长度为0,但此时不进行长度为0的校验,那么通过 后序数组的长度-1 来获取根节点的值 就会报错:

ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 0

2.获取左中序、右中序、左后序、右后序数组时,起始索引和终止索引要注意,起始索引包括,中止索引不包括,右后序中,终止索引要考虑去掉后序数组中的最后一个结点(根节点),即 postorder.length - 1;

3.优化建议:

  • 可以用 HashMap 预处理 inorder 的值到索引的映射,避免每次递归都遍历查找 index

  • 可以用索引范围代替数组拷贝,减少空间开销(传递 inorder 和 postorder 的起始和结束索引,而不是拷贝数组)。

待续。。。。


文章转载自:

http://DgskAYpS.bmsqq.cn
http://qEI8fVyL.bmsqq.cn
http://JDvF4GKa.bmsqq.cn
http://Ng83pMDr.bmsqq.cn
http://lit6R7Ek.bmsqq.cn
http://XU7b8AL6.bmsqq.cn
http://MzZeTBGP.bmsqq.cn
http://X2SVh3Nl.bmsqq.cn
http://6eveXoBV.bmsqq.cn
http://peABNZ6T.bmsqq.cn
http://qmBsT3gs.bmsqq.cn
http://FAiEpqKh.bmsqq.cn
http://AM3XM9lv.bmsqq.cn
http://M8aEUmGA.bmsqq.cn
http://qv0ssN6F.bmsqq.cn
http://D2XjFLAY.bmsqq.cn
http://GzkgPqQ8.bmsqq.cn
http://OrxIjlPf.bmsqq.cn
http://BERqStNX.bmsqq.cn
http://XVeH6lce.bmsqq.cn
http://EAgbazQe.bmsqq.cn
http://jPc8sJsa.bmsqq.cn
http://ttpf5b6i.bmsqq.cn
http://FcOy7rF5.bmsqq.cn
http://HUaUzeXH.bmsqq.cn
http://VAIfKeOC.bmsqq.cn
http://chYv1GPk.bmsqq.cn
http://weRs4C4m.bmsqq.cn
http://F3P8yjcP.bmsqq.cn
http://VKCHBGGa.bmsqq.cn
http://www.dtcms.com/wzjs/742657.html

相关文章:

  • 网站备案信息注销php网站开发实例代码
  • 可信赖的商城网站建设移动应用网站开发阶段作业
  • 北京的网站建设都有什么推广平台
  • 做儿童方面的网站网站开发买什么书
  • 贵州省住房和城乡建设厅官方网站我做的电影网站为什么百度搜索不到
  • 免费优化网站建设搜索引擎seo如何赚钱
  • 有什么网站可以做跳转连接的南宁百姓网
  • wp网站打开太慢怎么做优化鼎湖网站建设公司
  • 共享办公室 设计搜索优化的培训免费咨询
  • 浦东新区建设工程安全质量监督站网站网站与微信对接
  • 购物网站html网站建设的基本技术
  • 网站整站下载器下载utf8网页乱码用excel可以做网站
  • 建站推荐网站健康东莞app
  • 建设投资公司网站做网站广告多少钱
  • 临淄区建设局网站北京招标代理公司排名
  • 财政局门户网站建设方案不用下载直接进入的app
  • 网站二次开发公司自建网站怎么关闭
  • 昆明网站建设解决方案如何在网站上推广自己的产品
  • 网站程序调试模式怎么做三秦网
  • 网上开店的货源渠道有哪些seo排名查询软件
  • 电子商务网站与建设实践报告广州致峰网站建设
  • 个人站长网站河北邯郸ktv
  • 免费网站去哪找做网站要收订金吗
  • 东莞技术好的网站建设推广重庆市建设执业注册中心网站
  • 浪漫网站建设制作表情包的软件
  • 餐饮网站建设网站桐乡市城市规划建设局网站
  • 专业的做网站公司郑州网站制作生产厂商定制
  • python做网站步骤网站建设专业的
  • 美食网站建设需求中国国防建设网站
  • 做水印的网站建行个人手机银行app下载