知识改变命运 数据结构【二叉树OJ题】

news2024/11/23 20:26:39

1. 检查两颗树是否相同OJ链接

在这里插入图片描述

 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;
            }
            boolean left=isSameTree(p.left,q.left);
            boolean right=isSameTree(p.right,q.right);
            if (left&&right) {
                return true;
            } else {
                return false;
            }

        }
 }

2. 另一颗树的子树。OJ链接

在这里插入图片描述

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&&subRoot!=null) {
                return false;
            }
            if (root==null&&subRoot==null) {
                return true;
            }
            if(isSameTree(root,subRoot)) {
                return true;
            }
            if(isSubtree(root.left,subRoot)) {
                return true;
            }
            if (isSubtree(root.right,subRoot)) {
                return true;
            }
            return false;
        }
}

3. 翻转二叉树。Oj链接

在这里插入图片描述

class Solution {
  public TreeNode invertTree(TreeNode root) {
        if(root==null) {
            return null;
        }
        TreeNode tem=root.left;
        root.left=root.right;
        root.right=tem;
        invertTree(root.left);
        invertTree(root.right);
        return root;
    }
}

4. 判断一颗二叉树是否是平衡二叉树。OJ链接

在这里插入图片描述

class Solution {
      public boolean isBalanced(TreeNode root) {
        if(root==null) {
            return true;
        }
        if(Math.abs((getHeight(root.left)-getHeight(root.right)))>1) {
            return false;
        }
        return isBalanced(root.left)&&isBalanced(root.right);
    }
     int getHeight(TreeNode root) {
        if(root==null) {
            return 0;
        }
        int leftHeight=getHeight(root.left);
        int rightHeight=getHeight(root.right);
        return Math.max(leftHeight+1,rightHeight+1);
    }
}

5. 对称二叉树。OJ链接

在这里插入图片描述

class Solution {
      public boolean isBalanced(TreeNode root) {
        if(root==null) {
            return true;
        }
        if(Math.abs((getHeight(root.left)-getHeight(root.right)))>1) {
            return false;
        }
        return isBalanced(root.left)&&isBalanced(root.right);
    }
     int getHeight(TreeNode root) {
        if(root==null) {
            return 0;
        }
        int leftHeight=getHeight(root.left);
        int rightHeight=getHeight(root.right);
        return Math.max(leftHeight+1,rightHeight+1);
    }
}

6. 二叉树的构建及遍历。OJ链接

在这里插入图片描述

public class Main {
    static class TreeNode {
        char val;
        TreeNode left;
        TreeNode right;
        public TreeNode(char val) {
            this.val = val;
        }
    }
    public static int i = 0;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String ch = in.nextLine();
            TreeNode root = creatTree(ch);
            inOrder(root);
        }
    }
    public static TreeNode creatTree(String ch) {
        TreeNode root = null;

        char ch2 = ch.charAt(i);
        if (ch2 != '#') {
            root = new TreeNode(ch2);
            i++;
            root.left = creatTree(ch);
            root.right = creatTree(ch);
        } else {
            i++;
        }
        return root;
    }
    public static void  inOrder(TreeNode root) {
        if (root == null) {
            return;
        }
        inOrder(root.left);
        System.out.print(root.val + " ");
        inOrder(root.right);
    }
}

7. 二叉树的分层遍历 。OJ链接

在这里插入图片描述

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List <List<Integer>> ret =new LinkedList<>();
        if(root==null) {
            return ret;
        }
        Queue<TreeNode> queue=new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()) {
            List<Integer> list=new ArrayList<>();
            int size=queue.size();
            while(size!=0) {
                TreeNode cur=queue.poll();
                size--;
                list.add(cur.val);
                if(cur.left!=null) {
                    queue.offer(cur.left);
                }
                if(cur.right!=null) {
                    queue.offer(cur.right);
                }
            }
            ret.add(list);
        }
        return ret;
    }
}

8. 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先 。OJ链接

在这里插入图片描述
方法1:

class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root==null) {
            return null;
        }
        if(root==p) {
            return p;
        }
        if(root==q) {
            return q;
        }
        TreeNode leftRoot=lowestCommonAncestor(root.left,p,q);
        TreeNode rightRoot=lowestCommonAncestor(root.right,p,q);
        if(leftRoot!=null&&rightRoot!=null) {
            return root;
        }
        if(leftRoot==null) {
            return rightRoot;
        }
        if(rightRoot==null) {
            return leftRoot;
        }
        return null;
    }
}

9. 根据一棵树的前序遍历与中序遍历构造二叉树。 OJ链接

在这里插入图片描述

class Solution {
   public int i=0;
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        TreeNode root;
        root=greatTreeSon(preorder,inorder,0,inorder.length-1);
        return root;
    }
    public TreeNode greatTreeSon(int[] preorder, int[] inorder0,int inBegin,int inEnd) {
        if(inBegin>inEnd) {
            return null;
        }
        TreeNode root=new TreeNode(preorder[i]);
        int index=findKey(preorder[i],inorder0,inBegin,inEnd);
        i++;
        root.left=greatTreeSon(preorder,inorder0,inBegin,index-1);
        root.right=greatTreeSon(preorder,inorder0,index+1,inEnd);
        return root;
        
    }
    private int findKey(int key, int[] inorder0,int inBegin,int inEnd) {
        for (int j = inBegin; j <=inEnd ; j++) {
            if(inorder0[j]==key) {
                return j;
            }
        }
        return -1;
    }
}

10. 根据一棵树的中序遍历与后序遍历构造二叉树。OJ链接

在这里插入图片描述

11. 二叉树创建字符串。OJ链接

在这里插入图片描述

class Solution {
    public String tree2str(TreeNode root) {
        StringBuilder stringBuilder=new StringBuilder();
        GreatString(stringBuilder,root);
        return stringBuilder.toString();
    }
    public void GreatString(StringBuilder stringBuilder,TreeNode root) {
        if(root==null) {
            return;
        }
        stringBuilder.append(root.val);
        if (root.left!=null) {
            stringBuilder.append("(");
            GreatString(stringBuilder,root.left);
            stringBuilder.append(")");
        } else {
            if(root.right==null) {
                return;
            } else {
                stringBuilder.append("()");
            }
        }
        if(root.right!=null) {
            stringBuilder.append("(");
            GreatString(stringBuilder,root.right);
            stringBuilder.append(")");
        } else {
            return;
        }
    }
}

注意:以下三个题放在堆的知识篇章里面讲

  1. 二叉树前序非递归遍历实现 。OJ链接
  2. 二叉树中序非递归遍历实现。OJ链接
  3. 二叉树后序非递归遍历实现。OJ链接

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

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

相关文章

数据库内容保密检查系统:及时发现“潜在”安全威胁

日前&#xff0c;国内专注于保密与非密领域的分级保护、等级保护、业务连续性安全和大数据安全产品解决方案与相关技术研究开发的领军企业——国联易安自主研发的国联数据库内容保密检查系统V1.0通过国保局涉密检测&#xff0c;获得涉密信息系统产品检测证书。其主要具备以下主…

nginx访问控制,用户认证,https

nginx访问控制 用于location段Allow&#xff1a;设定允许哪台或哪些主机访问&#xff0c;多个参数间用空格隔开Deny&#xff1a;设定禁止那台或哪些主机访问&#xff0c;多个参数间用空格隔开比如&#xff1a;allow 192.168.100.20 192.168.100.30;deny all;拒绝某台主机访问…

JavaEE 第18节 TCPUDP优缺点(对比)

目录 前言1、UDP(User Datagram Protocol)优点缺点 2、TCP(Transmission Control Protocol)优点缺点 3、总结 前言 基于TCP/IP协议栈&#xff0c;TCP和UDP属于传输层协议。在Java生态中也分别提供了相关套接字&#xff08;Socket&#xff09;1的API&#xff0c;方便网络编程。…

基于OpenCV+MFC的KCF测速软件

基于OpenCVMFC的KCF测速软件 引言原理介绍使用介绍&#xff08;1&#xff09;主界面&#xff08;2&#xff09;打开视频&#xff08;3&#xff09;点击KCF测速&#xff08;4&#xff09;框选待检测目标&#xff08;5&#xff09;测速结果 资源链接&#xff08;包含源码&#xf…

How do I do function calling in Azure Openai using the javascript sdk

题意&#xff1a;如何使用 JavaScript SDK 在 Azure OpenAI 中进行函数调用&#xff1f; 问题背景&#xff1a; I want to be able to call functions based on the user input, I could do this with the openai library but cant find a way to do so in the azure openai l…

uniapp中$off没写正确引发的问题~

你们好&#xff0c;我是金金金。 场景 我正在使用uniapp开发微信小程序&#xff0c;涉及到几个页面之间的事件通信&#xff0c;采用的是uniapp里面的$on和&off来达到页面之间的互相通信功能如下&#xff1a;有一个选择城市的页面&#xff0c;当选择了某个城市&#xff0c;另…

树数据结构(Tree Data Structures)的全面指南:深度解析、算法实战与应用案例

树数据结构&#xff08;Tree Data Structures&#xff09;的全面指南&#xff1a;深度解析、算法实战与应用案例 引言 树数据结构&#xff08;Tree Data Structures&#xff09;作为计算机科学中的基石之一&#xff0c;以其独特的层次结构和分支特性&#xff0c;在众多领域发…

Hive SQL

一、基本数据类型 tinyint 1byte 有符号整数 smallint 2byte 有符号整数 int 4byte 有符号整数 bigint 8byte 有符号整数 boolean 布尔类型&#xff0c;true或者false float 单精度浮点数 double 双精度浮点数 decim…

系统数据迁移脱敏方案(word)

数据脱敏工作不仅要确保敏感信息被去除&#xff0c;还需要尽可能的平衡脱敏所花费的代价、使用方的业务需求等多个因素。因此&#xff0c;为了确保数据脱敏的过程、代价可控&#xff0c;得到的结果正确且满足业务需要&#xff0c;在实施数据脱敏时&#xff0c;应从技术和管理两…

stm32之I2C通信协议

文章目录 前言一、I2C通信协议二、I2C硬件电路三、I2C时序基本单元3.1 起始与终止信号3.2 发送与接收一个字节3.3 发送与接收应答 四、I2C时序分析4.1 指定地址写4.2 当前地址读4.3 指定地址读 前言 提示&#xff1a;本文主要用作在学习江科大自化协STM32入门教程后做的归纳总…

刷机维修进阶教程-----紫光展讯芯片修改参数 修复基带 信号的一种步骤解析【二】

上期解析了一款紫光芯片机型 改写参数的步骤。今天来讲解另外一款紫光新机型修改参数的具体步骤。同类紫光展讯 展锐芯片机型可以参考尝试 通过博文了解; 1---紫光芯片机型新款机型改写参数的步骤解析 2----了解同类芯片修改参数的常用步骤 3----列举一些紫光芯片机型开启…

OpenStack常见模块详解

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

“NoSQL数据库技术及其应用”写作框架,软考高级,系统架构设计师

论文真题 随着互联网web2.0网站的兴起&#xff0c;传统关系数据库在应对web2.0 网站&#xff0c;特别是超大规模和高并发的web2.0纯动态SNS网站上已经显得力不从心&#xff0c;暴露了很多难以克服的问题&#xff0c;而非关系型的数据库则由于其本身的特点得到了非常迅速的发展…

Zookeeper的watch机制是如何工作的?

ZooKeeper Watch 概述 ZooKeeper Watch 机制类似于 Java 设计模式中的观察者模式或者监听模式&#xff0c;唯一的不同是不再基于线程间通信&#xff0c;而是基于进程间通信。 ZooKeeper Watch 机制是指&#xff0c;客户端在所有的读命令上告知服务端&#xff1a;这个节点或者…

windows 提权方式汇总

windows 提权 一、土豆&#xff08;potato&#xff09;家族提权 原理 土豆提权就是通过 windows 的 COM&#xff08;Component Object Model&#xff0c;组件对象模型&#xff09;类。向指定的服务器端口发送 NTLM 认证&#xff0c;捕获认证数据包&#xff0c;并修改数据包内…

【C++】—— 内存管理

【C】—— 内存管理 1 C/C 的内存划分 1.1 C/C 的内存分布1.2 C/C 的内存分布练习 2 C语言 中动态内存管理方式&#xff1a;malloc/calloc/realloc/free3 C 内存管理方式3.1 new / delete 操作内置类型3.2 new 和 delete 操作自定义类型3.2.1 new 和 delete 操作自定义类型基础…

layui栅格布局设置列间距不起作用

layui栅格布局支持设置列间距&#xff0c;只需使用预置类layui-col-space*即可。不过实际使用时却始终看不到效果。   根据layui官网文档的说明&#xff0c;只需要在行所在div元素的class属性中增加layui-col-space*即可出现列间距。如下图所示&#xff1a;   但是实际使用…

【MySQL】MySQL 表的增删改查(进阶)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 约束类型 not null 非空 unique 唯一 default 指定默认值 primary key 主键 foreign key 外键 check字句 检查 表设计 确定实体 实体之间的关系 聚合查询 聚合函数…

基于SSM的学生信息管理系统的设计与实现 (含源码+sql+视频导入教程+文档+VISIO图)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的学生信息管理系统12拥有三种角色&#xff1a;学生、教师、管理员 学生&#xff1a;选课、查看已选课程、查看成绩 教师&#xff1a;成绩管理 管理员&#xff1a;课程管理、学生…

ai变声:视频怎么变音?分享6个语音变声器,视频变声不再难!

想过如何让自己的直播内容更吸引人吗&#xff1f;你是否希望通过变声器来打造独特的声音效果&#xff1f;或者&#xff0c;如何用创意声音提升观众的互动体验呢&#xff1f;随着直播行业的不断发展&#xff0c;每位主播都在努力寻找吸引观众的独特方式&#xff0c;而变声器正是…