当前位置: 首页 > news >正文

二叉树 - 对称二叉树

101. 对称二叉树

在这里插入图片描述
在这里插入图片描述

方法一:递归判断

/*** 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} root* @return {boolean}*/
var isSymmetric = function (root) {// 使用递归遍历左右子树 递归三部曲// 1. 确定递归的参数 root.left root.right 和返回值true falseconst compareNode = function(left, right) {// 2. 确定终止条件 空的情况if (left == null && right !== null || left !== null && right === null) {return false;} else if (left === null && right === null) {return true;} else if (left.val !== right.val) {return false;}// 3. 确定单层递归逻辑let outSide = compareNode(left.left, right.right);let inSide = compareNode(left.right, right.left);return outSide && inSide;}if (root === null) {return true;}return compareNode(root.left, root.right);
};

方法二:队列实现迭代判断

/*** 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} root* @return {boolean}*/
var isSymmetric = function (root) {// 迭代方法判断是否是对称二叉树// 首先判断root是否为空if (root === null) {return true;}let queue = [];queue.push(root.left);queue.push(root.right);while (queue.length) {let leftNode = queue.shift();  // 左节点let rightNode = queue.shift();  // 右节点if (leftNode === null && rightNode === null) {continue;}if (leftNode === null || rightNode === null || leftNode.val !== rightNode.val) {return false;}queue.push(leftNode.left);  // 左节点左孩子入队queue.push(rightNode.right);  // 右节点右孩子入队queue.push(leftNode.right);  // 左节点右孩子入队queue.push(rightNode.left);  // 右节点左孩子入队}return true;
};

方法三:栈实现迭代判断

/*** 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} root* @return {boolean}*/
var isSymmetric = function (root) {// 迭代方法判断是否是对称二叉树// 首先判断root是否为空if (root === null) {return true;}let stack = [];stack.push(root.left);stack.push(root.right);while (stack.length) {let rightNode = stack.pop();  // 左节点let leftNode = stack.pop();  // 右节点if (leftNode === null && rightNode === null) {continue;}if (leftNode === null || rightNode === null || leftNode.val !== rightNode.val) {return false;}stack.push(leftNode.left);  // 左节点左孩子入栈stack.push(rightNode.right);  // 右节点右孩子入栈stack.push(leftNode.right);  // 左节点右孩子入栈stack.push(rightNode.left);  // 右节点左孩子入栈}return true;
};

http://www.mrgr.cn/news/4366.html

相关文章:

  • 上海晋名气瓶暂存柜助力高校气瓶安全储存
  • 安全基础学习-SM3加密算法
  • perl——获取数组中元素的索引
  • 【51单片机】DHT11驱动,11.0592MHZ,使用DHT11传感器测量温湿度
  • centos 网络: DNS解析错误
  • 九毛九净利润骤降:翻台率、人均消费下滑,股价今年跌六成
  • 【Linux 驱动】IMX6ULL pinctrl驱动
  • 聊聊最近很火的后端即服务
  • 开发团队如何专业的应对突如其来的技术故障与危机?
  • 二叉树学习笔记
  • [数据集][目标检测]集装箱缺陷检测数据集VOC+YOLO格式4127张3类别
  • 在全球开源“集市”新时代,共创中国根社区的领导力
  • 由于找不到 mfc140u.dll,无法继续执行代码。重新安装程序可能会解决此问题。
  • c++每日练习记录第1天
  • 网络安全学习路线图(2024版详解)
  • 什么是BERT?工程快速入门
  • 【SpringBoot】使用Spring Boot、MyBatis-Plus和MySQL来实现增删改查操作,并添加自定义SQL查询。
  • Ansible可视化管理之web界面集成使用探究(未完待续)
  • 【PHPSTORM 使用非挂起断点】
  • SpringBootWeb 篇-深入了解 SpringBoot + Vue 的前后端分离项目部署上线与 Nginx 配置文件结构