11.22二叉树相关OJ

news2024/11/24 3:10:20

目录

一.每天学一个知识点

1.涉及公式

1.s.trim()

2.substring() 可以看出是满足一系列合法条件的时候,就会返回一个新的字符串.

1.思路1 栈

思路2:stringbulider

二,二叉树相关OJ题

1.检查两颗树是否相同

2.另一颗树的子树。

3.判断一颗二叉树是否是平衡二叉树

1.时间复杂度o(n^2)方法

2.时间复杂度为O(n)的做法

4.遍历二叉树建立

5.对称二叉树的判断


 

一.每天学一个知识点

8cb36a15620c402fa868d6b894508cb6.png

1.涉及公式

1.s.trim()

第一个循环找到开头的st下标.第二个循环找到结尾的.

01b09bbef04c45a79bcd697ea2a1ad49.png

2.substring() 可以看出是满足一系列合法条件的时候,就会返回一个新的字符串.

这里注意,from就是左臂右开的

27dc1a1ee1f7439ab564d0ab42a4a90a.png

s.substring s = s.trim() math.abs

1.思路1 栈

把元素从后往前压入栈中,如果遇到空格,就用sb接收弹出来的值,

如果遇到第一个元素且不是空格还要再次判断一次.

618de377fc754f21b9dabc84704bd6f3.png

思路2:stringbulider

d29f6a30466544a8b4459f070f812624.png

5e6642a8dd0c4a4ba7db72e5b521f91b.png

没有考虑最后一个单词的情况就算考虑到了,也不能处理两个单词间有空格的情况

a627d2287c144d7292e96f80e55e8eae.png

7fa8ccc6b9f54c2e85251352175a99aa.png

class Solution {
    public String reverseWords(String s) {
     s=s.trim();//删除首尾空格 是返回一个新的字符串
    StringBuilder sb=new StringBuilder();
    int j=s.length()-1;int i=j;
    while(i>=0){
      while(i>=0&&s.charAt(i)!=' ') i--;//找空格
      sb.append(s.substring(i+1,j+1)+' '); //拼接在一起加上空格
      while(i>=0&&s.charAt(i)==' ') i--;//跳过单词间的空格
      j=i;

    }
   
    return sb.toString().trim();//处理最后一个单词

}
}

二,二叉树相关OJ题

1.检查两颗树是否相同

思路:不仅树节点结构相同也就是不能有一个为null有一个不为null.而且要求两个值要相同

b7d28da7444941d69e54ad3f38e1c9ad.png

 public boolean isSameTree(TreeNode p, TreeNode q) {
       if(p == null && q !=null ||p!=null&&q==null) return false;
       if(p==null&&q==null)return true;
       if(p.val==q.val) return true;
       //如果这样的话,假设两个相同,就没办法往下走了,就永远递归不了,直接返回true
       //必须要求都满足条件,再往下递归
       return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
    }

此方法耦合度高且可读性差

class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if(p!=null&&q!=null){
            if(p.val!=q.val){
                return false;
            }
        }else if(p==null&&q==null){
            return true;

        }else{
            return false;
        }
       boolean b= isSameTree(p.left,q.left);
       if(b){
        b=isSameTree(p.right,q.right);
       }
       return b;


    }
}

2.另一颗树的子树。

思路:要么就判断是否是相同的树,或者是他的左子树或者右子树是否相同,然后继续递归.

96496907ba7748a19428ade01c9b31e8.png

class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q){
        if(p==null&&q!=null||p!=null&&q==null) return false;
        if(p==null&&q==null) return true;
        if(p.val!=q.val) return false;
        return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
    }
    public boolean isSubtree(TreeNode root, TreeNode subRoot) {
        if(root==null) return false;
        if(isSameTree(root,subRoot)) return true;
        return isSubtree(root.left,subRoot)||isSubtree(root.right,subRoot);
    }
}

3.判断一颗二叉树是否是平衡二叉树

c186ecea7cdf46e583b1d52017d1f924.png

1a2179478cf941a79f266edb52fed590.png

思路:如果是平衡二叉树那么每颗子树都是平衡二叉树,所以又要递归

1.时间复杂度o(n^2)方法

class Solution {
    public int treeHeight(TreeNode root){
        if(root==null) return 0;
        int heightLeft=treeHeight(root.left);
        int heightright=treeHeight(root.right);  
        return heightLeft>heightright?heightLeft+1:heightright+1;

    }
    public boolean isBalanced(TreeNode root) {
        if(root==null) return true;   
        int heightLeft=treeHeight(root.left);
        int heightright=treeHeight(root.right);
        if(heightLeft-heightright>1){
            return false;
        }
        if(heightright-heightLeft>1){
            return false;
        }//如果是true,总长度满足,剩下的分支就不会管了.就不会往下递归了
        //走到这一行要求左右差距不超过1
        return isBalanced(root.left)&&isBalanced(root.right);
    }
}

2.时间复杂度为O(n)的做法

因为在求树的高度的时候就已经把每个节点递归了

然后再平衡树的方法的时候又把每个节点再拿进去求所以复杂度就是n*n

class Solution {
    public int treeHeight(TreeNode root){
        if(root==null) return 0;
        int heightLeft=treeHeight(root.left);
        int heightright=treeHeight(root.right);
        if(heightLeft>=0&&heightright>=0&&Math.abs(heightLeft-heightright)<=1){
            return Math.max(heightLeft,heightright)+1;
        }else{
            return -1;
        }
       

    }
    public boolean isBalanced(TreeNode root) {
        if(root==null) return true;
        return treeHeight(root)>=0;
  

    }
}

4.遍历二叉树建立

9429da3636a84b84ab11262609f7916c.png

class TreeNode {
    TreeNode left;
    TreeNode right;
    char  val;
     TreeNode(char val) {
        this.val = val;
    }
}

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void inorder(TreeNode root){
        if(root==null) return;
        inorder(root.left);
        System.out.print(root.val+" ");
        inorder(root.right);

    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String str = in.nextLine();
            TreeNode root = createTree(str);
            inorder(root);
            System.out.println();
            i=0;
        }

    }
    public static int i=0;
    public static TreeNode createTree(String str) {
        char ch=str.charAt(i);
        TreeNode root=null;
        if(ch!='#'){
            root=new TreeNode(ch);
            i++;
            root.left=createTree(str);
            root.right=createTree(str);
        }else{
            i++;
        }
        return root;
    }

}

5.对称二叉树的判断

也就是子树的左节点和另一棵树的右节点分别判断,也就是把判断两棵树是否相同改编一下就好

class Solution {
    public boolean issame(TreeNode p,TreeNode q){
        if(p!=null&&q==null) return false;
        if(p==null&&q!=null) return false;
        if(p==null&&q==null) return true;
        if(p.val!=q.val) return false;
        return issame(p.left,q.right)&&issame(p.right,q.left);

    }
    public boolean isSymmetric(TreeNode root) {
        if(root==null) return true;
        return issame(root.left,root.right);

    }
}

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28380.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据培训课程GroupingComparator分组案例实操

GroupingComparator分组案例实操 1&#xff0e;需求 有如下订单数据 表4-2 订单数据 现在需要求出每一个订单中最贵的商品。 &#xff08;1&#xff09;输入数据 &#xff08;2&#xff09;期望输出数据 1 222.8 2 722.4 3 232.8 2&#xff0e;需求…

python数学建模--时间序列模型--指数平滑

目录时间序列指数平滑一次指数平滑预测示例二次指数平滑预测示例三次指数平滑本博客参考&#xff1a;《python数学实验与建模 》 时间序列 时间序列数据是按照时间顺序排列的、随着时间变化且相互关联的数据序列&#xff0c;这类数据往往反映了某一事物、现象等随时间的变化状…

升级光伏供应链体系,供应商系统规范供应商管理,促进企业与供应商高效协同

作为过去十年我国发展最快的可再生能源&#xff0c;截止到2020年光伏累计装机量达到253GW&#xff0c;过去10年复合增长率达到20%以上&#xff0c;新增光伏装机48.2GW&#xff0c;同比增长60%。全球可再生能源署预计2050年光伏累计装机规模将达8519GW&#xff0c;成为最主流的电…

【MySQL】 B+ 树存储的原理

1. B 树 和 B 树 B Tree 模拟生成工具&#xff1a;https://www.cs.usfca.edu/~galles/visualization/BTree.html BTree 模拟生成工具&#xff1a; https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html B 树 —— 1970年&#xff0c;R.Bayer和E.mccreight提出了一种…

[附源码]java毕业设计学生量化考核管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

LIN休眠唤醒及测试心得

上期LIN测试小课堂&#xff0c;我们分享了LIN总线帧结构及各场干扰&#xff0c;如何测试样件是否不响应错误的帧结构。 这次我们的介绍主题是LIN休眠唤醒&#xff0c;一起看看标准和差异性&#xff0c;开发和测试的关系&#xff0c;实际的案例分享也来了。 一、LIN控制器休眠…

编译原理—语义分析、语法制导翻译、翻译模式、中间代码生成

编译原理—语义分析、语法制导翻译、翻译模式、中间代码生成语法制导翻译语法制导定义(属性文法)翻译模式后缀式图示表示法构建表达式的语法树中间代码的种类三地址码四地址码对比举例中间代码产生的场景说明语句的翻译举例嵌套说明语句的翻译方案相关定义举例过程嵌套声明记录…

BDP FL-PEG5-炔丙基,2093197-93-2,BDP FL-PEG5-propargyl是一种 BDP FL 接头

BDP FL-PEG5-propargyl ​中英文名&#xff1a; CAS号&#xff1a;2093197-93-2| 英文名&#xff1a;BDP FL-PEG5-propargyl |中文名&#xff1a;BDP FL-五聚乙二醇-炔基&#xff0c; BDP FL-PEG5-炔丙基BDP FL-PEG5-propargyl ​物理参数&#xff1a; CASNumber&#xff1a;20…

微信小程序基础学习(5):使用 npm包、全局数据共享、分包

1. 使用 npm包 1.1 小程序对 npm 的支持与限制 目前&#xff0c;小程序中已经支持使用 npm 安装第三方包&#xff0c;从而来提高小程序的开发效率。但是&#xff0c;在小程序中使用 npm 包有如下 3 个限制&#xff1a; 不支持依赖于 Node.js 内置库的包。不支持依赖于浏览器…

查看进程信息(ps、top) + 操作后台进程(jobs、bg、fg)

目录 1、查看进程信息 (1) 查看进程快照 —— ps (2) 查看进程的动态信息 —— top (3) 查看进程的详细信息 —— /proc 2、操作后台进程 (1) 将进程转为后台 (2) 将后台进程转为前台运行 fg (3) 查看后台进程 jobs 1、查看进程信息 (1) 查看进程快照 —— ps 所谓…

Word控件Spire.Doc 【图像形状】教程(3) :在 C#/VB.NET 中的指定位置插入图像

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

【无标题】接口测试遇到的典型bug纪录

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

Java#22(内部类)

目录 一.内部类 1.什么是内部类? 2.什么时候用? 3.特点 二.成员内部类,静态内部类,局部内部类(稍微了解即可) 1.获取成员内部类对象的两种方式? 2.外部类成员变量和内部类成员变量重名时&#xff0c;在内部类如何访问? 2.静态内部类 3.局部内部类 三. 匿名内部类…

verdi基础操作

看波形&#xff1a; 1.代码里选中&#xff0c;再按鼠标中键拖进去 2.选中&#xff0c;ctrlw 3.用get signal 在波形框中&#xff0c;按照鼠标左键再左右移动&#xff0c;可以放大这一部分的波形&#xff0c;还有下面的功能键可以用 删除波形&#xff1a; 按delete或者cut掉…

如何压缩图片200k以下?

“图片过大无法上传”&#xff0c;“因您上传的图片大小超过限制”这样的提示大家都有遇到过吧&#xff1f;这就是告诉我们现在的图片需要压缩一下才能继续使用了&#xff0c;否则我们就无法使用当前照片了。 那有很多平台&#xff0c;特别是上传一些证件照的时候&#xff0c;要…

北京筑龙获爱分析采购数字化报告大满贯, 领跑供应链协同市场

2022年11月21日&#xff0c;国内领先的数字化市场研究咨询机构爱分析发布了《2022爱分析采购数字化厂商全景报告》&#xff08;以下简称《报告》&#xff09;。北京筑龙凭借专业的数字化技术、采购供应链数字化经验以及在政企数字化领域积累的丰富项目实践经验&#xff0c;成功…

微信小程序商城搭建步骤_我们来说说微信小程序商城开发的作用

比如下面我推荐的这个就有很多不错的各行业商城小程序模板&#xff0c;新手也能轻松搭建的那种&#xff01;&#xff08;见我主页&#xff09; 但要想把商城小程序运营到能稳定赚钱&#xff0c;就需要商家结合自身的实际&#xff0c;去指定合适的推广策略。下面就讲讲如何实现线…

第4章 配置集成第3方log4net日志中间件

在上一章中虽然已经把第3方log4net日志中间件定义到了当前程序中&#xff0c;但是并没有把第3方log4net日志中间件的功能配置并集到当前程序中&#xff0c;即当前程序还不能通过第3方log4net日志中间件把日志数据信息持久化到指定的文件或表中&#xff0c;本章即将实现当前程序…

SpringBoot2.X与redis Lettuce集成踩坑

起因 最近项目上发现一个问题&#xff0c;redis cluster集群有一台机崩了之后&#xff0c;后台服务的redis会一直报错&#xff0c;无法连接到redis集群。通过命令查看redis集群&#xff0c;发现redis cluster集群是正常的&#xff0c;备用的slave机器已经升级为master。 于是初…

c<7>存储

目录 1&#xff0c;局部变量 1,auto 2,static 2&#xff0c;全局变量的储存类型 3,register 4,extern 作用&#xff1a; 1&#xff0c;局部变量 #include <stdio.h> int main() {int fAuto(int a);int fStatic(int a); //函数声明int a 1, i; //自动局部变…