力扣练习训练2(java)——二叉树的中序遍历、对称二叉树、二叉树的最大深度、买卖股票的最佳时机

1、二叉树的中序遍历

对于二叉树的输入:

首先需要知道二叉树的前序遍历:根节点→左节点→右节点

中序遍历:左节点→根节点→右节点

后序遍历:左节点→右节点→根节点

(主要是根节点在变化)

使用递归的方法,首先新建一个列表用于存储排序后的数字,之后调用函数进行递归,之后返回列表,递归的函数(定义为void,有可能返回空/列表)需要传入节点和列表,首先判断此时传入的节点是否为空,如果为空直接返回空;之后由于是中序排序,因此先左节点、再根节点,最后右节点,左右节点再次使用递归函数,根节点则直接在列表中进行添加,同样的对于前、后序排序,只需要调整根节点的代码即可,放置位置不同效果不同。如下所示:

/**

* 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 List<Integer> inorderTraversal(TreeNode root) {

List<Integer>res=new ArrayList<Integer>();

indor(root,res);

return res;

}

public void indor(TreeNode rot,List<Integer> res){

if(rot==null){

return;

}

indor(rot.left,res);

res.add(rot.val);//调整这行位置,可实现前序、中序和后序排序

indor(rot.right,res);

}

}

2、对称二叉树

解题思路:这道题需要判断二叉树是否是对称,相当于左子树是从左到右排列,而右子树则是从右到左的排序

将情况主要分为三大部分进行判断,首先在check函数中将根节点的左子树和右子树分别设置为p,q

(1)如果p和q同时为0,直接返回true,表明这个二叉树是对称的

(2)p或者q里边只要有一个不为0,就返回false,相当于一个根节点只有某一侧节点有值,很明显不对称

(3)如果p和q都不为空,但是两者的值并不相等,也返回0

最后使用递归思想,再次调用ckeck函数,将p.left和q.right进行检查,p.right和q.left进行比较,满足对称的想法

代码如下:

/**

* 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 boolean isSymmetric(TreeNode root) {

return check(root.left,root.right);

}

public boolean check(TreeNode p,TreeNode q){

if(p==null && q==null){

return true;

}

if(p==null || q==null){

return false;

}

if(p.val!=q.val){

return false;

}

return check(p.left,q.right)&&check(p.right,q.left);

}

}

3、二叉树的最大深度

解题思路:这道题主要要记得一个方法,maxDepth 作用用于计算‌树结构(如二叉树或 N 叉树)的最大深度‌,即从根节点到最远叶子节点的最长路径上的节点总数。

因此这道题的主要做法就是首先判断根节点是否为空,如果为空则直接返回0

其次如果不为空,二叉树深度公式:1+取(左子树的最大深度,右子树的最大深度)的最大值,就是整个二叉树的最大深度,只要某一侧一直有数就可。

代码如下:

class Solution {

public int maxDepth(TreeNode root) {

if(root==null){return 0;}

return 1+Math.max(maxDepth(root.left),maxDepth(root.right));

}

}

4、买卖股票的最佳时机

解题思路:这道题的列表实际上记录的是每天的股票价格

如果在第x天时卖出,收获的最大利润=第x天的股票价格-前x天中某一天的最低股票价格

首先设定一个最小值(初始值先类似于无穷大),之后再设一个最大利润值(初始值为0)

使用for循环进行遍历,使用if语句,当price[i]小于min时,将min更新为price[i](这一步相当于要在i天前内,先找到这组数列中的最小值)

(如果前i天的最小值)如果price[i]-maxpro>maxpro时,将maxpro重新更新为price[i]-maxpro

最后循环结束之后返回maxpro

代码如下:

class Solution {

public int maxProfit(int[] prices) {

int min=Integer.MAX_VALUE;//定义一个很大的值

int maxpro=0;

for(int i=0;i<prices.length;i++){

if(prices[i]<min){

min=prices[i];

}else if(maxpro<prices[i]-min){

maxpro=prices[i]-min;

}

}

return maxpro;

}

}

相关推荐
Byron__2 小时前
HashMap面试知识点
java·面试·hash
诺浅2 小时前
聊聊@DSTransactional的坑
java·多数据源·dstransavtional
菜鸟‍2 小时前
【后端项目】苍穹外卖day01-开发环境搭建
java·开发语言·spring boot
lzksword2 小时前
C++ Builder XE OpenDialog1打开多文件并显示xls与xlsx二种格式文件
java·前端·c++
青槿吖2 小时前
【保姆级教程】Spring事务控制通关指南:XML+注解双版本,避坑指南全奉上
xml·java·开发语言·数据库·sql·spring·mybatis
y = xⁿ3 小时前
【LeetCodehot100】二叉树大合集 T94:二叉树的中序遍历 T104:二叉树的最大深度 T226:翻转二叉树 T101:对称二叉树
后端·算法·深度优先
不想看见4043 小时前
Search a 2D Matrix II数组--力扣101算法题解笔记
数据结构·算法
IronMurphy3 小时前
【算法二十六】108. 将有序数组转换为二叉搜索树 98. 验证二叉搜索树
数据结构·算法·leetcode
mygljx3 小时前
spring-ai 下载不了依赖spring-ai-openai-spring-boot-starter
java·人工智能·spring