数据结构 二叉树OJ题

数据结构 二叉树OJ题

文章目录

  • 数据结构 二叉树OJ题
      • 1. 检查两颗二叉树是否相同
      • 2. 判断树是否为另一个树的子树
      • 3. 翻转二叉树
      • 4. 平衡二叉树
      • 5. 对称二叉树
      • 6. 二叉树遍历
      • 7. 二叉树层序遍历
      • 8. 最近公共祖先
      • 9. 二叉树创建字符串
      • 10. 非递归方式实现前序遍历
      • 11. 非递归方式实现中序遍历
      • 12. 非递归方式实现后序遍历

结合之前所学的二叉树知识,我们来刷一些OJ题巩固一下:

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;}return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);}
}

在这里插入图片描述

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 (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;}if (root.left == null && root.right == null) {return root;}TreeNode temp = root.left;root.left = root.right;root.right = temp;invertTree(root.left);invertTree(root.right);return root;}
}

在这里插入图片描述

4. 平衡二叉树

OJ链接

代码示例:

class Solution {public boolean isBalanced(TreeNode root) {if (root == null) {return true;}int leftH = getHeight(root.left);int rightH = getHeight(root.right);if (Math.abs(leftH-rightH) > 1) {return false;}return isBalanced(root.left) && isBalanced(root.right);}public int getHeight(TreeNode root) {if (root == null) {return 0;}int leftNode = getHeight(root.left);int rightNode = getHeight(root.right);return leftNode > rightNode ? leftNode + 1 : rightNode + 1;}
}

在这里插入图片描述

5. 对称二叉树

OJ链接

代码示例:

class Solution {public boolean isSymmetric(TreeNode root) {if (root == null) {return true;}return isSymmetricChild(root.left,root.right);}private boolean isSymmetricChild(TreeNode leftTree, TreeNode rightTree) {if (leftTree == null && rightTree == null) {return true;}if ((leftTree == null && rightTree != null) || (leftTree != null && rightTree == null)) {return false;}if (leftTree.val != rightTree.val) {return false;}return isSymmetricChild(leftTree.left,rightTree.right) && isSymmetricChild(leftTree.right,rightTree.left);}
}

在这里插入图片描述

6. 二叉树遍历

[OJ链接]:

代码示例:

import java.util.Scanner;public class Main {public static int i = 0;static class TreeNode {char val;TreeNode left;TreeNode right;public TreeNode(char val) {this.val = val;}}public static void main(String[] args) {Scanner in = new Scanner(System.in);String s1 = in.nextLine();TreeNode root = createTree(s1);isOrder(root);}public static TreeNode createTree(String s) {if (s.charAt(i) != '#') {TreeNode root = new TreeNode(s.charAt(i));i++;root.left = createTree(s);root.right = createTree(s);return root;}else {i++;}return null;}public static void isOrder(TreeNode root) {if (root == null) {return;}isOrder(root.left);System.out.print(root.val + " ");isOrder(root.right);}
}

在这里插入图片描述

7. 二叉树层序遍历

OJ链接

代码示例:

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

在这里插入图片描述

8. 最近公共祖先

OJ链接

代码示例:

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root == null) {return null;}if (root == p || root == q) {return root;}TreeNode leftTree = lowestCommonAncestor(root.left,p,q);TreeNode rightTree = lowestCommonAncestor(root.right,p,q);if (leftTree != null && rightTree != null) {return root;}else if(leftTree != null) {return leftTree;}else {return rightTree;}}
}

在这里插入图片描述

9. 二叉树创建字符串

[OJ链接]:

代码示例:

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

在这里插入图片描述

10. 非递归方式实现前序遍历

[OJ链接]:

代码示例:

class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> list = new LinkedList<>();if (root == null) {return list;}Stack<TreeNode> stack = new Stack<>();TreeNode cur = root;while(cur != null || !stack.isEmpty()) {while(cur != null) {stack.push(cur);list.add(cur.val);cur = cur.left;}TreeNode top = stack.pop();cur = top.right;}return list;}}

在这里插入图片描述

11. 非递归方式实现中序遍历

[OJ链接]:

代码示例:

class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> list = new LinkedList<>();if (root == null) {return list;}Stack<TreeNode> stack = new Stack<>();TreeNode cur = root;while(cur != null || !stack.empty()) {while(cur != null) {stack.push(cur);cur = cur.left;}TreeNode top = stack.pop();list.add(top.val);cur = top.right;}return list;}
}

在这里插入图片描述

12. 非递归方式实现后序遍历

[OJ链接]:

代码示例:

class Solution {public List<Integer> postorderTraversal(TreeNode root) {List<Integer> list = new LinkedList<>();if (root == null) {return list;}Stack<TreeNode> stack = new Stack<>();TreeNode cur = root;TreeNode prev = null;while(cur != null || !stack.isEmpty()) {while(cur != null) {stack.push(cur);cur = cur.left;}TreeNode top = stack.peek();if (top.right == null || top.right == prev) {list.add(top.val);stack.pop();prev = top; // 记录下最新被打印的节点}else {cur = top.right;}}return list;}
}

在这里插入图片描述

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

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

相关文章

qt创建线程类并实现通信 C++

需求描述&#xff1a; 通过VS创建了一个QT项目&#xff0c;我需要一个线程类去实时获取设备取流的图像&#xff0c;并将图像传给qt的类用于在QLabel上显示。 实现&#xff1a; 头文件&#xff1a; //include ...省略//Qt界面的类Your_Project class Your_Project : public Q…

游戏开发年度报告 | 2023年游戏开发团队最流行的制作和发行的方式

近期&#xff0c;Perforce发布了《2023游戏开发与设计现状报告》。此报告调查了来自全球各地的游戏开发专业人士&#xff0c;了解他们面临的主要开发挑战、使用的工具和流程&#xff0c;以及目前最让他们对这个行业感到兴奋的方面。 龙智作为Perforce授权合作伙伴&#xff0c;将…

wifi指纹室内定位系统 计算机竞赛

简介 今天来介绍一下室内定位相关的原理以及实现方法; WIFI全称WirelessFidelity&#xff0c;在中文里又称作“行动热点”&#xff0c;是Wi-Fi联盟制造商的商标做为产品的品牌认证&#xff0c;是一个创建于IEEE 802.11标准的无线局域网技术。基于两套系统的密切相关&#xff…

接口测试很难?3分钟带你入门接口自动化测试

​1、什么是接口&#xff1f; 接口是连接前台和后台的桥梁&#xff0c;前台通过接口调用后端已完成的功能&#xff0c;而无需关注内部的实现细节。借助于接口&#xff0c;可以实现前后台分离&#xff0c;各自完成开发工作后&#xff0c;进行联调&#xff0c;提高工作效率 2、…

Java中的正则表达式

1、体验正则表达式 import java.util.regex.Matcher; import java.util.regex.Pattern;/*** Description: 体验正则表达式:提取英文单词* Author: yangyongbing* CreateTime: 2023/10/16 08:38* Version: 1.0*/ public class Regexp {public static void main(String[] args)…

PostgreSQL 导出数据为CSV

在SQL脚本中导出数据&#xff0c;可以使用COPY命令。以下是一个示例&#xff1a; COPY (SELECT * FROM your_table) TO path/to/your_file.csv WITH CSV HEADER;请确保将your_table替换为你要导出数据的实际表名&#xff0c;并将path/to/your_file.csv替换为你要保存数据的实际…

NodeMCU ESP8266 基于Arduino IDE的串口图形化调试教程(超详细)

NodeMCU ESP8266 基于Arduino IDE的串口图形化调试教程 文章目录 NodeMCU ESP8266 基于Arduino IDE的串口图形化调试教程前言Serial Plotter测试前期准备打开工具方法 1方法 2 测试代码 总结 前言 在嵌入式的开发过程中&#xff0c;我们经常会采集一些传感器的数据&#xff0c…

【接口测试】接口测试内容

主要内容如下&#xff1a; 一、接口测试的相关基础知识 什么是接口测试&#xff1f; 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间、以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换、传递和控制管理过程&#xff0c;以…

数据结构 - 5(二叉树7000字详解)

一&#xff1a;二叉树的基本概念 1.1树形结构 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 注意&am…

探秘Socks5代理在跨界电商、爬虫和游戏领域的应用

在当今数字化浪潮中&#xff0c;技术对于各行各业都产生着深远的影响。其中&#xff0c;Socks5代理技术作为一项关键的网络工具&#xff0c;不仅在跨界电商领域提供了便利&#xff0c;还在爬虫数据采集以及游戏体验优化中扮演着重要角色。本文将深入探讨Socks5代理技术在这些领…

js继承的几种方式(原型链继承、构造函数继承、组合式继承、寄生组合式继承、ES6的Class类继承)

1.原型链继承 实现原理&#xff1a;子类的原型指向父类实例。子类在自身实例上找不到属性和方法时去它父类实例&#xff08;父类实例和实例的原型对象&#xff09;上查找&#xff0c;从而实现对父类属性和方法的继承 缺点&#xff1a; 子类创建时不能传参&#xff08;即没有…

探究Socks5代理和代理IP在技术领域的多重应用

随着数字化时代的不断发展&#xff0c;网络工程师在跨界电商、爬虫数据采集、出海业务拓展以及游戏优化等领域扮演着关键角色。而Socks5代理和代理IP作为他们的得力工具&#xff0c;在这些领域中发挥着至关重要的作用。本文将深入探讨这两种技术在技术领域中的应用&#xff0c;…

scrollIntoView使用与属性详解

scrollIntoView 使用与属性详解 效果图如下图所示 如果要想让元素滚动到指定位置 window.onload function () {containerItems[6].scrollIntoView({ behavior: "smooth" }); };js 代码 const containerItems document.querySelectorAll(".container div&…

2 files found with path ‘lib/armeabi-v7a/liblog.so‘ from inputs:

下图两个子模块都用CMakeLists.txt引用了android的log库&#xff0c;编译后&#xff0c;在它们的build目录下都有liblog.so的文件。 四个CPU架构的文件夹下都有。 上层模块app不能决定使用哪一个&#xff0c;因此似乎做了合并&#xff0c;路径就是报错里的哪个路径&#xff0c…

【算法训练-排序算法 一】【手撕排序】快速排序、堆排序、归并排序

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【手撕排序系列】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

【6k字】详解Python装饰器和生成器

文章目录 1 Python装饰器1.1 什么是装饰器&#xff1f;1.1.1 参数化装饰器 1.2 装饰器的工作原理1.2.1 函数签名保持 1.3 装饰器的应用实例1.3.1 日志记录1.3.2 装饰器链1.3.3 自动注册装饰器 1.4 Summary 2 Python生成器2.1 生成器的定义和基本操作2.2 生成器的惰性求值和内存…

【工具】html请求 Content-Encoding=br 返回值乱码的问题 解码返回值

【工具】Content-Encodingbr 解码返回值 添加依赖 <dependency><groupId>org.brotli</groupId><artifactId>dec</artifactId><version>0.1.2</version></dependency> 代码 public static String 解码br(InputStream is) {try…

MySQL日志管理和权限管理(重点)

目录 一、日志管理1.错误日志2.二进制日志3.慢查询日志 二、权限管理(重点)1.用户登录管理2.创建用户及授权3.刷新权限4.权限简介5.查看权限7.修改密码8、删除用户9、查看密码复杂度 一、日志管理 日志类型 1、错误日志&#xff1a;启动&#xff0c;停止&#xff0c;关闭失败报…

UPS监控技术,你一定要试试,太绝了!

UPS&#xff08;不间断电源&#xff09;监控系统是一种关键的技术&#xff0c;用于监视、管理和维护不间断电源设备&#xff0c;以确保电力供应的稳定性和可用性。这对于各种组织和企业来说至关重要&#xff0c;因为电力中断可能导致生产中断、数据丢失和设备损坏&#xff0c;对…

全流量安全分析发现内部系统外联异常

内部系统外连监控的重要性在于保护企业的信息安全和预防数据泄露&#xff0c;以下是几个重要的理由&#xff1a; 1、检测异常活动&#xff1a;通过监控内部系统的外连连接&#xff0c;可以及时发现是否有未经授权或异常的链接尝试。这可能表示存在恶意软件、黑客攻击或内部员工…