【随想录】Day20—第六章 二叉树 part06

2024-04-15 01:28

本文主要是介绍【随想录】Day20—第六章 二叉树 part06,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 题目1: 654.最大二叉树
    • 1- 思路
    • 2- 题解
      • ⭐ 最大二叉树 ——题解思路
  • 题目2: 合并二叉树
    • 1- 思路
    • 2- 题解
      • ⭐最大二叉树 ——题解思路
  • 题目3: 700.二叉搜索树中的搜索
    • 1- 思路
    • 2- 题解
      • ⭐ 二叉搜索树中的搜索 ——题解思路
  • 题目4: 98. 验证二叉搜索树
    • 1- 思路
    • 2- 题解
      • ⭐验证二叉搜索树 ——题解思路

题目1: 654.最大二叉树

  • 题目链接:654. 最大二叉树

1- 思路

每次找到数组中的最大值,来构造一个结点,之后递归构造左子树和右子树

  • 由于涉及到区间分割,因此构造函数有
    • left 整型变量记录
    • right 整型变量记录

2- 题解

⭐ 最大二叉树 ——题解思路

在这里插入图片描述

class Solution {public TreeNode constructMaximumBinaryTree(int[] nums) {TreeNode root = build(nums,0,nums.length);return root;}public TreeNode build(int[] nums,int left,int right){if(left>=right){return null;}if(right-left==1){return new TreeNode(nums[left]);}// 单层int maxValue = nums[left];int maxIndex= left;for(int i=left+1;i<right;i++){if(nums[i]>maxValue){maxValue = nums[i];maxIndex = i;}}// 找到最大的TreeNode root = new TreeNode(maxValue);root.left = build(nums,left,maxIndex);root.right = build(nums,maxIndex+1,right);return root;}
}

题目2: 合并二叉树

  • 题目链接:617. 合并二叉树

1- 思路

递归三部曲

  • 1. 递归函数参数及返回值
  • 2. 终止条件
    • root1 和 root2 中间有一个 null 则返回
  • 3. 单层递归逻辑
    • 将 root1.val 的值更新
    • 递归 root1.left
    • 递归 root2.right

2- 题解

⭐最大二叉树 ——题解思路

在这里插入图片描述

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;}
}

题目3: 700.二叉搜索树中的搜索

  • 题目链接:700. 二叉搜索树中的搜索

1- 思路

递归三部曲实现


2- 题解

⭐ 二叉搜索树中的搜索 ——题解思路

在这里插入图片描述

class Solution {public TreeNode searchBST(TreeNode root, int val) {TreeNode res = search(root,val);return res;}public TreeNode search(TreeNode root,int val){// 终止条件if(root==null){return root;}if(root.val==val){return root;}TreeNode result = new TreeNode(0);if(root.val > val) result = search(root.left,val);if(root.val < val) result = search(root.right,val);return result;}
}

题目4: 98. 验证二叉搜索树

  • 题目链接:98. 验证二叉搜索树

1- 思路

先中序遍历,将遍历结果转为数组,之后判断数组中的元素是否满足升序即可


2- 题解

⭐验证二叉搜索树 ——题解思路

在这里插入图片描述

class Solution {List<Integer> res = new ArrayList<>();public boolean isValidBST(TreeNode root) {inorderT(root);int[] nums = new int[res.size()];for(int i = 0; i < res.size();i++){nums[i] = res.get(i);}for(int i = 1; i < nums.length ;i++){if(nums[i]<=nums[i-1]){return false;}}return true;}public void inorderT(TreeNode root){if(root==null) return;inorderT(root.left);res.add(root.val);inorderT(root.right);}
}

这篇关于【随想录】Day20—第六章 二叉树 part06的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/904550

相关文章

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

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

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

PHP实现二叉树遍历(非递归方式,栈模拟实现)

二叉树定义是这样的:一棵非空的二叉树由根结点及左、右子树这三个基本部分组成,根据节点的访问位置不同有三种遍历方式: ① NLR:前序遍历(PreorderTraversal亦称(先序遍历)) ——访问结点的操作发生在遍历其左右子树之前。 ② LNR:中序遍历(InorderTraversal) ——访问结点的操作发生在遍历其左右子树之中(间)。 ③ LRN:后序遍历(PostorderT

第六章习题11.输出以下图形

🌏个人博客:尹蓝锐的博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~ 1、题目要求: 输出以下图形

代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

52. 携带研究材料 这是一个完全背包问题,就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的,就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream># include<vector>using namespace std;int main(){int n,m;cin>>n>>m;std::vector<i

代码随想录打卡Day25

今天一整天都在教研室做实验,没时间刷题,就做了一题,剩下的明天补 491.递增子序列 这道题目和之前的子集问题很像,但是有一点要注意的,这个输入的数组不能进行排序,所以就不能沿用之前的去重逻辑,这道题要去重还是得借助额外的变量来维护元素使用情况,但是这题的used为集合,且不能为全局变量,只能为树层遍历前定义的一个局部变量,除了这个改动以外,其他地方都是高度相似的。 class Soluti

在二叉树中找到两个节点的最近公共祖先(基于Java)

如题  题解 public int lowestCommonAncestor(TreeNode root, int o1, int o2) {//记录遍历到的每个节点的父节点。Map<Integer, Integer> parent = new HashMap<>();Queue<TreeNode> queue = new LinkedList<>();parent.put(roo

数据结构--二叉树(C语言实现,超详细!!!)

文章目录 二叉树的概念代码实现二叉树的定义创建一棵树并初始化组装二叉树前序遍历中序遍历后序遍历计算树的结点个数求二叉树第K层的结点个数求二叉树高度查找X所在的结点查找指定节点在不在完整代码 二叉树的概念 二叉树(Binary Tree)是数据结构中一种非常重要的树形结构,它的特点是每个节点最多有两个子节点,通常称为左子节点和右子节点。这种结构使得二叉树在数据存储和查找等方面具

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II 1.题目 1.1递增子序列 题目链接:491. 非递减子序列 - 力扣(LeetCode) 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0491.%E9%80%92%E

代码随想录算法训练营Day37|完全背包问题、518.零钱兑换II、377. 组合总和 Ⅳ、70. 爬楼梯(进阶版)

完全背包问题                  和01背包最大区别就是一个物品可以重复放多次,因此遍历空间时可以从前往后。 import java.util.*;public class Main{public static void main (String[] args) {Scanner sc = new Scanner(System.in);int m = sc.nextInt