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

峰峰企业做网站推广电脑培训机构

峰峰企业做网站推广,电脑培训机构,手机免费制作ppt,做搜狗手机网站点击软文章目录 说明题目 144. 二叉树的前序遍历题解 题目 94. 二叉树的中序遍历题解 题目 145. 二叉树的后序遍历题解 题目 105. 从前序与中序遍历序列构造二叉树题解 题目 106. 从中序与后序遍历序列构造二叉树题解 #x1f64a; 前言#xff1a;本文章为瑞_系列专栏之《刷题》的… 文章目录 说明题目 144. 二叉树的前序遍历题解 题目 94. 二叉树的中序遍历题解 题目 145. 二叉树的后序遍历题解 题目 105. 从前序与中序遍历序列构造二叉树题解 题目 106. 从中序与后序遍历序列构造二叉树题解 前言本文章为瑞_系列专栏之《刷题》的力扣LeetCode系列主要以力扣LeetCode网的题进行解析与分享。本文仅供大家交流、学习及研究使用禁止用于商业用途违者必究 说明 本文主要是配合《瑞_数据结构与算法_二叉树》对二叉树的知识进行提升和拓展 题目 144. 二叉树的前序遍历 原题链接Leetcode144. 二叉树的前序遍历 给你二叉树的根节点 root 返回它节点值的前序遍历。 示例 1 输入root [1,null,2,3] 输出[1,2,3] 示例 2 输入root [] 输出[] 示例 3 输入root [1] 输出[1] 示例 4 输入root [1,2] 输出[1,2] 示例 5 输入root [1,null,2] 输出[1,2] 提示 树中节点数目在范围 [0, 100] 内-100 Node.val 100 进阶递归算法很简单你可以通过迭代算法完成吗 题解 /*** 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 ListInteger preorderTraversal(TreeNode root) {/** 栈*/LinkedListTreeNode stack new LinkedList();/** 代表当前节点*/TreeNode current root;/** 最近一次弹栈的元素*/TreeNode pop null;ListInteger result new ArrayList();while (!stack.isEmpty() || current ! null) {if (current ! null) {stack.push(current);// 待处理左子树result.add(current.val);current current.left;} else {TreeNode peek stack.peek();// 没有右子树if (peek.right null) {// 获取最近一次弹栈的元素pop stack.pop();}// 右子树处理完成else if (peek.right pop) {// 获取最近一次弹栈的元素pop stack.pop();}// 待处理右子树else {current peek.right;}}}return result;} }题目 94. 二叉树的中序遍历 原题链接Leetcode94. 二叉树的中序遍历 给定一个二叉树的根节点 root 返回 它的中序遍历 。 示例 1 输入root [1,null,2,3] 输出[1,3,2] 示例 2 输入root [] 输出[] 示例 3 输入root [1] 输出[1] 提示 树中节点数目在范围 [0, 100] 内-100 Node.val 100 进阶: 递归算法很简单你可以通过迭代算法完成吗 题解 /*** 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 ListInteger inorderTraversal(TreeNode root) {/** 栈*/LinkedListTreeNode stack new LinkedList();/** 代表当前节点*/TreeNode current root;/** 最近一次弹栈的元素*/TreeNode pop null;ListInteger result new ArrayList();while (!stack.isEmpty() || current ! null) {if (current ! null) {stack.push(current);// 待处理左子树current current.left;} else {TreeNode peek stack.peek();// 没有右子树if (peek.right null) {result.add(peek.val);// 获取最近一次弹栈的元素pop stack.pop();}// 右子树处理完成else if (peek.right pop) {// 获取最近一次弹栈的元素pop stack.pop();}// 待处理右子树else {result.add(peek.val);current peek.right;}}}return result;} }题目 145. 二叉树的后序遍历 原题链接Leetcode145. 二叉树的后序遍历 示例 1 输入root [1,null,2,3] 输出[3,2,1] 示例 2 输入root [] 输出[] 示例 3 输入root [1] 输出[1] 说明 树中节点的数目在范围 [0, 100] 内-100 Node.val 100 进阶递归算法很简单你可以通过迭代算法完成吗 题解 /*** 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 ListInteger postorderTraversal(TreeNode root) {/** 栈*/LinkedListTreeNode stack new LinkedList();/** 代表当前节点*/TreeNode current root;/** 最近一次弹栈的元素*/TreeNode pop null;ListInteger result new ArrayList();while (!stack.isEmpty() || current ! null) {if (current ! null) {stack.push(current);// 待处理左子树current current.left;} else {TreeNode peek stack.peek();// 没有右子树if (peek.right null) {// 获取最近一次弹栈的元素pop stack.pop();result.add(pop.val);}// 右子树处理完成else if (peek.right pop) {// 获取最近一次弹栈的元素pop stack.pop();result.add(pop.val);}// 待处理右子树else {current peek.right;}}}return result;} }题目 105. 从前序与中序遍历序列构造二叉树 原题链接Leetcode105. 从前序与中序遍历序列构造二叉树 给定两个整数数组 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 3000inorder.length preorder.length-3000 preorder[i], inorder[i] 3000preorder 和 inorder 均 无重复 元素inorder 均出现在 preorderpreorder 保证 为二叉树的前序遍历序列inorder 保证 为二叉树的中序遍历序列 题解 思路 1. 前序遍历preorder的第一个值肯定是根节点。通过preorder寻找根节点。2. 中序遍历inorder在根节点之前的值是根节点的左子树部分而之后的值是根节点的右子树部分。通过inorder区分左右子树部分。3. 通过循环inorder使用根节点确定中序遍历的左右子树部分、前序遍历的左右子树部分。4. 根据1.2.3.继续分为子问题递归解决。/*** 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) {if (preOrder.length 0) {return null;}// 创建根节点int rootValue preOrder[0];TreeNode root new TreeNode(rootValue);// 区分左右子树for (int i 0; i inOrder.length; i) {if (inOrder[i] rootValue) {// 0 ~ i-1 左子树// i1 ~ inOrder.length -1 右子树int[] inLeft Arrays.copyOfRange(inOrder, 0, i); int[] inRight Arrays.copyOfRange(inOrder, i 1, inOrder.length); int[] preLeft Arrays.copyOfRange(preOrder, 1, i 1);int[] preRight Arrays.copyOfRange(preOrder, i 1, preOrder.length); root.left buildTree(preLeft, inLeft); root.right buildTree(preRight, inRight); break;}}return root;} }瑞可以使用HashMap优化以及新数组可以通过索引坐标参数传递优化。具体可见本系列HashMap章节后续更新 题目 106. 从中序与后序遍历序列构造二叉树 原题链接Leetcode106. 从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder 其中 inorder 是二叉树的中序遍历 postorder 是同一棵树的后序遍历请你构造并返回这颗 二叉树 。 示例1 输入inorder [9,3,15,20,7], postorder [9,15,7,20,3]输出[3,9,20,null,null,15,7]示例2 输入inorder [-1], postorder [-1]输出[-1]提示: 1 inorder.length 3000 postorder.length inorder.length-3000 inorder[i], postorder[i] 3000 inorder 和 postorder 都由 不同 的值组成postorder 中每一个值都在 inorder 中inorder 保证是树的中序遍历postorder 保证是树的后序遍历 题解 思路 1. 后序遍历postorder的最后一个元素就是根节点。通过postorder寻找根节点。2. 中序遍历inorder在根节点之前的值是根节点的左子树部分而之后的值是根节点的右子树部分。通过inorder区分左右子树部分。3. 通过循环inorder使用根节点确定中序遍历的左右子树部分、后序遍历的左右子树部分。4. 根据1.2.3.继续分为子问题递归解决。/*** 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[] inOrder, int[] postOrder) {if (inOrder.length 0) {return null;}// 根int rootValue postOrder[postOrder.length - 1];TreeNode root new TreeNode(rootValue);// 切分左右子树for (int i 0; i inOrder.length; i) {if (inOrder[i] rootValue) {int[] inLeft Arrays.copyOfRange(inOrder, 0, i);int[] inRight Arrays.copyOfRange(inOrder, i 1, inOrder.length);int[] postLeft Arrays.copyOfRange(postOrder, 0, i);int[] postRight Arrays.copyOfRange(postOrder, i, postOrder.length - 1);root.left buildTree(inLeft, postLeft);root.right buildTree(inRight, postRight);break;}}return root;} }本文是博主的粗浅理解可能存在一些错误或不完善之处如有遗漏或错误欢迎各位补充谢谢 如果觉得这篇文章对您有所帮助的话请动动小手点波关注你的点赞收藏⭐️转发评论都是对博主最好的支持~
http://www.zqtcl.cn/news/469832/

相关文章:

  • 网页 网站 区别现在装宽带要多少钱
  • 黄金网站下载免费建设个人网站需要什么条件
  • 网站开发人员岗位职责网站维护报价单
  • 免费正能量不良网站推荐自建网站视频教程
  • 厦门物流网站建设南京宜电的网站谁做的
  • vps 网站备案手机界面设计素材
  • seo排名影响因素主要有灯塔seo
  • 济南哪家做网站小勇cms网站管理系统
  • sns社交网站注册做网站 提交源码 论坛
  • wordpress网站编辑semir是什么牌子
  • 做区块链的网站教育培训机构平台
  • 系统网站怎么做的seo竞争对手分析
  • 菏泽网站建设菏泽众皓网页开发工资
  • 网站建设需求分析酒类群晖wordpress 映射
  • 呼和浩特网站建设宣传wordpress淘宝客插件开发
  • 如何建网站赚钱做淘宝网店需要多少钱
  • 做个企业网站 优帮云移动商城个人中心手机卡进度查询
  • 深圳建设网站哪家最好国外互联网裁员
  • 网站重新建设的请示wordpress get_terms 排序
  • 建站模板免费下载wordpress 管理地址
  • 静安企业网站制作wordpress文章列表显示缩略图
  • html前端网站开发先做网站还是先解析
  • 怎么通过域名访问网站elision wordpress
  • 做邮轮的网站做游戏的软件app
  • 做网站用php还是python家装十大品牌排行榜
  • 湛江网站建设招聘创作者服务平台
  • 衡阳建网站高中制作网站怎么做
  • 上海网站排名团队推广链接跳转
  • 寻找郑州网站优化公司上海高端网站定制
  • 网站关键词排名优化长城建设投资有限公司网站