一天一大 lee(相同的树)难度:简单-Day20200807
时间:2022-07-25
本文章向大家介绍一天一大 lee(相同的树)难度:简单-Day20200807,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目:
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例
- 示例 1
输入: 1 1
/ /
2 3 2 3
[1,2,3], [1,2,3]
输出: true
- 示例 2
输入: 1 1
/
2 2
[1,2], [1,null,2]
输出: false
- 示例 3
输入: 1 1
/ /
2 1 1 2
[1,2,1], [1,1,2]
输出: false
抛砖引玉
抛砖引玉
递归逐个校验
- 递归传入节点判断是否相同,相同则继续校验左右节点
- 同时递归到最终节点及 null 则说明所有校验均通过返回 true
- 两个树不是同时遇到最终节点 返回 false
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} p
* @param {TreeNode} q
* @return {boolean}
*/
var isSameTree = function (p, q) {
// 判断到最终节点相同 返回true
if (p === null && q === null) return true
// 两个树不是同时遇到最终节点 返回false
if (p === null || q === null) return false
// 传入节点是否相同
if (p.val !== q.val) return false
// 递归判断每个节点的左右节点
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right)
}
广度优先搜索
- 为每个树声明一个数组存放元素
- 相同则从数组中取出
- 不同则返回 false
var isSameTree = function (p, q) {
// 判断到最终节点相同 返回true
if (p === null && q === null) return true
// 两个树不是同时遇到最终节点 返回false
if (p === null || q === null) return false
let dp1 = [p],
dp2 = [q]
while (dp1.length && dp2.length) {
let node1 = dp1.shift(),
node2 = dp2.shift()
if (node1.val != node2.val) {
return false
}
let left1 = node1.left,
right1 = node1.right,
left2 = node2.left,
right2 = node2.right
// 异或,均为false或者均为true 结果为false,不然为true
if ((left1 === null) ^ (left2 === null)) return false
if ((right1 === null) ^ (right2 === null)) return false
// 该节点相同,继续推送下一个节点进行比较
if (left1 !== null) dp1.push(left1)
if (right1 !== null) dp1.push(right1)
if (left2 !== null) dp2.push(left2)
if (right2 !== null) dp2.push(right2)
}
// 所有节点比较完成返回true
return dp1.length === 0 && dp2.length === 0
}
- Spark源码系列(七)Spark on yarn具体实现
- 我们要在任何可能的地方测试XSS漏洞
- Angr:一个具有动态符号执行和静态分析的二进制分析工具
- Spark编程指南
- Spark Streaming编程指南
- Spark源码系列(八)Spark Streaming实例分析
- “震网三代”(CVE-2017-8464)的几种利用方法与防范
- Spark1.0新特性-->Spark SQL
- 挖洞经验 | 看我如何综合利用4个漏洞实现GitHub Enterprise 远程代码执行
- Spark的机器学习算法mlib的例子运行
- Spark Streaming自定义Receivers
- 利用USB橡皮鸭在目标机器上启动Empire或Meterpreter会话
- Spark部署
- Spark调优
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 正则表达式笔记
- 统计字符串中字符出现的次数-Python
- 类和对象的哲学思考
- MySQL进阶篇(03):合理的使用索引结构和查询
- 动态查看及加载PHP扩展
- 少有人知的 Python "重试机制"
- Gradle之恋(14)-实战spring mvc插件式多项目构建
- Spring Boot 开箱即用
- Qt音视频开发2-vlc回调处理
- cmake学习
- 数据分析:在缓慢变化中寻找跳变——基于缓慢变化维度的用户分群
- 02 Confluent_Kafka权威指南 第二章:安装kafka
- Kafka集群搭建过程(kafka2.5+eagle)
- 07 Confluent_Kafka权威指南 第七章: 构建数据管道
- java中的reference(二): jdk1.8中Reference的源码阅读