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

网络运营主要工作内容湖南专业seo公司

网络运营主要工作内容,湖南专业seo公司,网站全屏轮播怎么做,wordpress调用所有栏目2024.2.20 题目来源我的题解方法一 递归方法二 迭代 题目来源 力扣每日一题;题序:105 我的题解 方法一 递归 前序特点:[ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ]中序特点:[ [左子树的中序遍历结果], 根节点…

2024.2.20

      • 题目来源
      • 我的题解
        • 方法一 递归
        • 方法二 迭代

题目来源

力扣每日一题;题序:105

我的题解

方法一 递归
  • 前序特点:[ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ]
  • 中序特点:[ [左子树的中序遍历结果], 根节点, [右子树的中序遍历结果] ]
    只要在中序遍历中定位到根节点,那么就可以分别知道左子树和右子树中的节点数目。由于同一颗子树的前序遍历和中序遍历的长度显然是相同的,因此就可以对应到前序遍历的结果中,对上述形式中的所有左右括号进行定位。
    这样以来,就知道了左子树的前序遍历和中序遍历结果,以及右子树的前序遍历和中序遍历结果,就可以递归地对构造出左子树和右子树,再将这两颗子树接到根节点的左右位置。

时间复杂度:O( n 2 n^2 n2) 。除了遍历节点,还需要扫描整个中序遍历的结果并找出根节点
空间复杂度:O(n)

public TreeNode buildTree(int[] preorder, int[] inorder) {return createTree(preorder,inorder,0,preorder.length-1,0,inorder.length-1);
}
// mid 根所在的位置
// pR 对应前序结束的位置
// iL 对应中序开始的位置
// iR 对应中序结束的位置
public TreeNode createTree(int[] preorder,int[] inorder,int mid,int pR,int iL,int iR){if(mid>pR||iL>iR)return null;int val=preorder[mid];TreeNode root=new TreeNode(val);int index=find(inorder,val,iL,iR);// 左子树的节点数量int left=index-iL;// 右子树的节点数量int right=iR-index;
// 构建左子树需要的前序序列和中序序列  pre[mid,mid+left]  in[iL,index-1]   root.left=createTree(preorder,inorder,mid+1,mid+left,iL,index-1);
// 构建右子树需要的前序序列和中序序列  pre[mid+left+1,pR]  in[index+1,iR]     root.right=createTree(preorder,inorder,mid+left+1,pR,index+1,iR);return root;
}
//在中序序列中找寻与前序对应的值val所在的位置
public int find(int[] inorder,int val,int iL,int iR){int index=iL;for(int i=iL;i<=iR;i++){if(inorder[i]==val){index=i;}}return index;
}

在中序遍历中对根节点进行定位时,一种简单的方法是直接扫描整个中序遍历的结果并找出根节点,这样做需要频繁扫描,时间复杂度较高。可以考虑使用哈希表来帮助快速地定位根节点。对于哈希映射中的每个键值对,键表示一个元素(节点的值),值表示其在中序遍历中的出现位置。在构造二叉树的过程之前,可以对中序遍历的列表进行一遍扫描,就可以构造出这个哈希映射。在此后构造二叉树的过程中,就只需要 O(1)的时间对根节点进行定位了。

//哈希表优化版本
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);}return createTree(preorder,inorder,0,preorder.length-1,0,inorder.length-1,map);
}
public TreeNode createTree(int[] preorder,int[] inorder,int mid,int pR,int iL,int iR,Map<Integer,Integer> map){if(mid>pR||iL>iR)return null;int val=preorder[mid];TreeNode root=new TreeNode(val);//直接根据哈希表确定位置int index=map.get(val);int left=index-iL;int right=iR-index;root.left=createTree(preorder,inorder,mid+1,mid+left,iL,index-1,map);root.right=createTree(preorder,inorder,mid+left+1,pR,index+1,iR,map);return root;
}
方法二 迭代

看官方题解吧,没怎么弄明白

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

http://www.hkea.cn/news/869474/

相关文章:

  • 局域网端口映射做网站西安竞价托管代运营
  • 重庆网站建设设计公司信息ip网站查询服务器
  • 网站积分的作用seo搜索引擎优化就业前景
  • 珠海网站品牌设计公司简介最新国内新闻重大事件
  • 广东专业网站客服软件定制站长统计app下载大全
  • 广东网站建设公司排名磁力帝
  • 胶南网站建设哪家好成都电脑培训班零基础
  • 集团网站建设哪家好网上推广怎么弄?
  • dz网站建设器最近有新病毒出现吗
  • 个人网站制作说明香港旺道旺国际集团
  • 监控做直播网站免费网站seo
  • 网站建设洪塔网站搜索优化排名
  • 专业做设计师品牌网站深圳百度总部
  • 网站兼容工具seo关键词排名优化教程
  • O2O网站制作需要多少钱美区下载的app怎么更新
  • 上海做网站 公司做电商必备的几个软件
  • caozi.com网站建设中百度指数如何分析数据
  • 互联网舆情处置公司武汉seo外包平台
  • 消防器材网站建设背景seo工作职位
  • 专业网站制作公司名称seo咨询茂名
  • 做b2c网站建网站seo
  • 代理注册香港公司seo技术交流论坛
  • 想要提高网站排名应该怎么做seo网站推广费用
  • 专业做食材网站seo链接优化建议
  • 做画册的网站附近哪里有计算机培训班
  • 大兴建站推广google登录
  • 长春个人做网站哪家好百度指数热度榜
  • 嘉兴手机网站开发费用百度学术论文官网入口
  • 刷业务网站怎么做seo关键词挖掘
  • 企业移动网站品牌苏州网站外包