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

注销主体备案与网站备案表个人工作室网站

注销主体备案与网站备案表,个人工作室网站,网页视频下载方法手机,女性时尚网站模板654.最大二叉树 力扣题目地址(opens new window) 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大…654.最大二叉树 力扣题目地址(opens new window) 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二叉树并且输出这个树的根节点。 示例 提示 给定的数组的大小在 [1, 1000] 之间。 思路 其实这个最大二叉树的定义和二叉搜索树非常像我们能想到的是先找到里面最大的节点将其放在根节点然后去它的左子树里面寻找接着去右子树里面寻找属于前序遍历。 确定递归函数参数以及返回值 public TreeNode constructMaximumBinaryTree1(int[] nums, int leftIndex, int rightIndex) 我们根据传入的数组和数组的起始结束节点来确定边界 确定终止条件 if (rightIndex - leftIndex 1) {// 没有元素了return null;}if (rightIndex - leftIndex 1) {// 只有一个元素return new TreeNode(nums[leftIndex]);} 当没有元素的时候直接退出只有一个元素的时候直接return即可 确定单层递归的逻辑 int maxIndex leftIndex;// 最大值所在位置int maxVal nums[maxIndex];// 最大值for (int i leftIndex 1; i rightIndex; i) {if (nums[i] maxVal){maxVal nums[i];maxIndex i;}}TreeNode root new TreeNode(maxVal);// 根据maxIndex划分左右子树root.left constructMaximumBinaryTree1(nums, leftIndex, maxIndex);root.right constructMaximumBinaryTree1(nums, maxIndex 1, rightIndex);return root; 通过循环找到最大值再通过递归左右最后return root即可 我们来看完整代码、 class Solution {public TreeNode constructMaximumBinaryTree(int[] nums) {return constructMaximumBinaryTree1(nums, 0, nums.length);}public TreeNode constructMaximumBinaryTree1(int[] nums, int leftIndex, int rightIndex) {if (rightIndex - leftIndex 1) {// 没有元素了return null;}if (rightIndex - leftIndex 1) {// 只有一个元素return new TreeNode(nums[leftIndex]);}int maxIndex leftIndex;// 最大值所在位置int maxVal nums[maxIndex];// 最大值for (int i leftIndex 1; i rightIndex; i) {if (nums[i] maxVal){maxVal nums[i];maxIndex i;}}TreeNode root new TreeNode(maxVal);// 根据maxIndex划分左右子树root.left constructMaximumBinaryTree1(nums, leftIndex, maxIndex);root.right constructMaximumBinaryTree1(nums, maxIndex 1, rightIndex);return root;} } 617.合并二叉树 力扣题目链接(opens new window) 给定两个二叉树想象当你将它们中的一个覆盖到另一个上时两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠那么将他们的值相加作为节点合并后的新值否则不为 NULL 的节点将直接作为新二叉树的节点。 示例 1: 注意: 合并必须从两个树的根节点开始。 思路 这道题不难我们只需要分别对两个数对应同一位置的节点进行比较并且对节点进行处理就可以采用那种遍历方式都行 确定递归方法及其参数 public TreeNode mergeTrees(TreeNode root1, TreeNode root2) { 我们只需要两棵树的节点就行 确定终止条件 if (root1 null) return root2; if (root2 null) return root1; 如果树枝的一部分为空直接返回另一部分就行了 确定单层递归逻辑 root1.val root2.val;root1.left mergeTrees(root1.left,root2.left);root1.right mergeTrees(root1.right,root2.right);return root1; 将两个节点的值相加然后递归左右节点即可 我们来看完整代码 class Solution {// 递归public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {if (root1 null) return root2;if (root2 null) return root1;root1.val root2.val;root1.left mergeTrees(root1.left,root2.left);root1.right mergeTrees(root1.right,root2.right);return root1;} } 700.二叉搜索树中的搜索 力扣题目地址(opens new window) 给定二叉搜索树BST的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在则返回 NULL。 例如 在上述示例中如果要找的值是 5但因为没有节点值为 5我们应该返回 NULL。 思路 我们找到了对应target值的节点之后进行返回操作即可中间利用二叉搜索树的性质进行查找 确定递归函数及其参数 public TreeNode searchBST(TreeNode root, int val 传入节点和target值即可 确定终止条件 if (root null || root.val val) {return root;} 当根节点为空或者我们找到了对应值的节点的时候我们直接返回就行 确定单层递归逻辑 if (val root.val) {return searchBST(root.left, val);} else {return searchBST(root.right, val);} 如果root的值比target大我们就从root的左子树去递归反之亦然 我们来看完整代码 class Solution {// 递归利用二叉搜索树特点优化public TreeNode searchBST(TreeNode root, int val) {if (root null || root.val val) {return root;}if (val root.val) {return searchBST(root.left, val);} else {return searchBST(root.right, val);}} } 98.验证二叉搜索树 力扣题目链接(opens new window) 给定一个二叉树判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征 节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 思路 二叉搜索树 左节点小于中间节点小于右节点注意是所有左节点 下面这个情况是不符合的 不能单纯的比较左节点小于中间节点右节点大于中间节点就完事了。 写出了类似这样的代码 if (root-val root-left-val root-val root-right-val) {return true; } else {return false; } 确定终止条件 if (root NULL) return true; 递归到空节点我们返回true因为空节点也是二叉搜索树 确定单层递归逻辑 boolean left isValidBST(root.left);if (pre ! null pre.val root.val) return false;pre root; // 记录前一个节点boolean right isValidBST(root.right);return left right; 左中右中序遍历找到最左边最小的节点值然后一层一层返回去判断当前节点值是否大于pre一旦有一个节点不满足就会返回false 然后向上返回回去。 我们可以通过图示理解 5/ \3 7/ \ \ 1 4 8 isValidBST(5) ├── left isValidBST(3) │ ├── left isValidBST(1) │ │ ├── left isValidBST(NULL) → true │ │ ├── pre NULL → 1 │ │ └── right isValidBST(NULL) → true │ │ └── 返回true true true │ ├── pre 1 → 3 │ └── right isValidBST(4) │ ├── left isValidBST(NULL) → true │ ├── pre 3 → 4 │ └── right isValidBST(NULL) → true │ └── 返回true true true │ └── 返回true true true ├── pre 4 → 5 └── right isValidBST(7)├── left isValidBST(NULL) → true├── pre 5 → 7└── right isValidBST(8)├── left isValidBST(NULL) → true├── pre 7 → 8└── right isValidBST(NULL) → true└── 返回true true true└── 返回true true true └── 返回true true true我们来看完整代码 class Solution {private TreeNode pre null; // 用来记录前一个节点public boolean isValidBST(TreeNode root) {if (root null) return true;boolean left isValidBST(root.left);if (pre ! null pre.val root.val) return false;pre root; // 记录前一个节点boolean right isValidBST(root.right);return left right;} }
http://www.zqtcl.cn/news/287829/

相关文章:

  • 网站栏目策划 有思想的新闻网站建设开发的流程
  • 网站描述修改潍坊百度网站排名
  • 网站开发设计的技术网站开发可能存在的困难
  • 单片机做网站网站地图那么建设
  • 手机版网站建设软件wordpress主题开发ide
  • 网站建设的技术有哪些内容网站推广优化排名
  • 网站开发用jsp网站开发需要什么技术
  • 网站打开404错误怎么解决网站开发树形图
  • 好的建设网站公司哪家好湖南省做网站的
  • 网站怎么上传网站建设可行性分析表
  • 东营做网站优化价格企业网站开发一般多少钱
  • 高端网站设计公司排名邢台哪里有做网站的
  • 广州网站开发 英诺科技营销式网站建设
  • 网站存在的缺陷编程的基础知识
  • flash同视频做网站天津建设工程信息网投标信息系统
  • 湛江做网站开发手机网址大全主页网址
  • 平面网站设计如何租用网站服务器
  • 课程视频网站建设的必要性专利减缓在哪个网站上做
  • 正规品牌网站设计品牌网站建设开发 脚本语言
  • 潍坊模板建站定制网站规划管理部门的网站建设
  • 光明楼网站建设九一人才网赣州招聘官网
  • 如何做网站监控wordpress修改文章点赞数
  • 佛山高端网站建设报价网站的建设属于无形资产
  • 永川网站设计wordpress+用户前台
  • 晋城客运东站网站开发公司装修通知告示怎么写
  • 北京做手机网站的公司哪家好完整的网站开发
  • 建立网站的内容规划长沙网络推广哪家
  • 网站建设及优化教程百度网站优化排名
  • 医院网站推广渠道网站关键词排名不稳定
  • 类网站建设陕西省建设资格注册中心网站