二叉树自顶向下递归和自底向上递归

二叉树自顶向下递归

自顶向下(top-down)

  • 和前序遍历紧密关联(根->左->右)
  • 当前节点的情况依赖于其父节点的情况
  • 考虑完父节点,再考虑当前节点

LeetCode 104. 二叉树的最大深度

class Solution {int ans;public int maxDepth(TreeNode root) {ans = 0;dfs(root, 0);return ans;}// 自顶向下public void dfs(TreeNode node, int depth) {// 需要先执行这句ans = Math.max(ans, depth);if (node == null)return;dfs(node.left, depth+1);dfs(node.right, depth+1);}
}

LeetCode 226. 翻转二叉树

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

LeetCode 111. 二叉树的最小深度

class Solution {public int minDepth(TreeNode root) {if (root == null)return 0;if (root.left == null && root.right == null)return 1;int ans = Integer.MAX_VALUE;if (root.left != null)ans = Math.min(ans, minDepth(root.left));if (root.right != null)ans = Math.min(ans, minDepth(root.right));return ans+1;}
}

LeetCode 112. 路径总和

class Solution {public boolean hasPathSum(TreeNode root, int targetSum) {if (root == null)return false;if (root.left == null && root.right == null)return targetSum == root.val;return hasPathSum(root.left, targetSum-root.val) || hasPathSum(root.right, targetSum-root.val);}
}

LeetCode 404. 左叶子之和

class Solution {public int sumOfLeftLeaves(TreeNode root) {if (root == null)return 0;elsereturn dfs(root);}public int dfs(TreeNode node) {int sum = 0;if (node == null)return sum;if (node.left != null) {if (isLeafNode(node.left)) {sum += node.left.val;}elsesum += dfs(node.left);}if (node.right != null && !isLeafNode(node.right))sum += dfs(node.right);return sum;}public boolean isLeafNode(TreeNode node) {return node.left == null && node.right == null;}
}

二叉树自底向上递归

自底向上(bottom-up)

  • 和后序遍历紧密关联(左->右->根)
  • 当前节点的情况依赖于其所有子节点的情况
  • 考虑完所有子节点,再考虑当前节点

LeetCode 104. 二叉树的最大深度

class Solution {public int maxDepth(TreeNode root) {return dfs(root);}// 自底向上public int dfs(TreeNode node) {if (node == null)return 0;int left = dfs(node.left);int right = dfs(node.right);return Math.max(left,right) + 1;}
}

LeetCode 110. 平衡二叉树

class Solution {public boolean isBalanced(TreeNode root) {if (root == null)return true;elsereturn Math.abs(dfs(root.left)-dfs(root.right))<=1 && isBalanced(root.left) && isBalanced(root.right);}public int dfs(TreeNode node) {if (node == null)return 0;elsereturn Math.max(dfs(node.left),dfs(node.right)) + 1;}
}

LeetCode 100. 相同的树

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

LeetCode 101. 对称二叉树

class Solution {public boolean isSymmetric(TreeNode root) {if (root == null)return true;return isSymmetricNode(root.left, root.right);}public boolean isSymmetricNode(TreeNode l, TreeNode r) {if (l == null && r == null)return true;if ( (l==null && r!=null) || (l!=null && r==null) )return false;if (l.val != r.val)return false;return isSymmetricNode(l.left, r.right) && isSymmetricNode(l.right, r.left);}
}

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

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

相关文章

数据库学习命令总结(持续更新)

单行注释&#xff1a;以#或--进行单行注释 多行注释&#xff1a;使/* 注释内容 */进行多行注释 使用--时须在最后一个-后添加至少一个控制字符&#xff08;如空格、制表符、换行符等&#xff09;防止注释--与减法运算的混淆 1、DDL数据定义语言 1.1数据库操作 1、创建数据库…

3D点云数据的标定,从搭建环境到点云标定方法及过程,只要有一台Windows笔记本,让你学会点云标定

ptscloudpre: 点云标定准备&#xff1a; 说明&#xff1a; 如下介绍适用windows系统的电脑。apple笔记本同理&#xff0c;但是需要安装MAC版本的anaconda。网址&#xff1a;Free Download | Anaconda可下载对应MAC版本的Anaconda的安装包建议下载2022年或2021年的安装包安装。…

ModuleNotFoundError No module named ‘bs4‘ 问题处理

ModuleNotFoundError: No module named ‘bs4’ 问题处理 在使用Postgres数据库时&#xff0c;因为SQL脚本中使用到了xml_killer函数&#xff0c;导致直接报错&#xff1a; org.postgresql.util.PSQLException: ERROR: ModuleNotFoundError: No module named ‘bs4’ 后来在…

Java中的Service

七. Service 1. 数据与逻辑分离 之前我们讲面向对象设计&#xff0c;都是把数据和逻辑放在一起&#xff0c;这是理想情况。 现实情况是&#xff0c;把对象分为两类&#xff0c;一类专门存数据&#xff0c;一类专门执行逻辑 存数据的就是一个 Java Bean 存逻辑的叫做 XxxSe…

CentOS 7安装Mysql+Mycat

安装MySQL yum源 yum localinstall http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm修改源 vi /etc/yum.repos.d/mysql-community.repo [mysql-connectors-community] nameMySQL Connectors Community baseurlhttp://repo.mysql.com/yum/mysql-connectors…

qml中访问控件内部的子项

如何访问Repeater类型内部的子项、Row等布局类型内部的子项以及ListView内部的子项等。。。 1、测试代码 import QtQuick 2.0 import QtQuick.Controls 2.12 import QtQuick.Window 2.12 import QtQuick.Layouts 1.3 import QtQml 2.12Window {id: windowobjectName: "m…

vue-drag-resize-rotate 拖拉拽旋转

中文在线演示地址 1.安装 npm install gausszhou/vue-drag-resize-rotate 2.使用 <template><div class"container"><vue-drag-resize-rotate:w"200":h"200":x"0":y"0":parent"true":draggab…

数据库四种隔离级别

未提交读&#xff08;脏读&#xff09;ru&#xff0c;在事务b中执行了某些操作&#xff0c;比如添加或者修改&#xff0c;这时候事务a可以读取到事务b这个事务还没提交之前的这些操作的结果&#xff0c;其结果被称为脏读。提交读 rc&#xff0c;事务b执行了一些操作并提交&…

基于Python Django的大数据招聘数据分析系统,包括数据大屏和后台管理

基于Python Django的大数据招聘数据分析系统是一个综合利用大数据技术和数据可视化技术的招聘行业解决方案。该系统旨在帮助企业和招聘机构更好地理解和分析招聘市场的趋势和变化&#xff0c;从而提高招聘效率和质量。 首先&#xff0c;该系统提供了一个强大的后台管理功能&am…

Docker容器引擎(3)

目录 一.Docker 镜像的创建 1&#xff0e;基于现有镜像创建 2&#xff0e;基于本地模板创建 3.基于Dockerfile创建&#xff1a; Dockerfile 操作常用的指令&#xff1a; ADD 和 COPY 的区别&#xff1f; CMD 和 ENTRYPOINT 的区别&#xff1f; 容器启动命令的优先级 如…

CF1362C Johnny and Another Rating Drop(二进制、复杂度考虑)

看完数据范围 n ∈ [ 1 , 1 e 18 ] n\in[1,1e18] n∈[1,1e18]就可以先猜一下要不是可以直接推公式&#xff0c;不能暴力去做&#xff0c;更不能遍历一遍&#xff0c;又看到这种2进制的题目&#xff0c;要猜是不是 l o g log log级别的复杂度。 可以依次考虑每一位 所有 i % 2 …

前端vue集成echarts图形报表样例

文章目录 &#x1f412;个人主页&#x1f3c5;Vue项目常用组件模板仓库&#x1f4d6;前言&#xff1a;&#x1f415;1.在项目终端下载echarts依赖包&#x1f3e8;2.在main.js中导入echarts资源包并使用&#x1f380;3.在.vue文件中直接使用echarts&#xff0c;下面是一个样例&a…

[设计模式Java实现附plantuml源码~创建型] 产品族的创建——抽象工厂模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

Nginx反向代理配置模块详解

Nginx反向代理配置模块详解 一、前言 随着互联网的发展&#xff0c;Web 应用越来越广泛&#xff0c;随之而来的是对 Web 服务器的高并发、高可用、高性能等需求的日益增长。Nginx 作为一个高性能的 HTTP 和反向代理服务器&#xff0c;由于其出色的性能和稳定性&#xff0c;越…

C语言-算法-线性dp

[USACO1.5] [IOI1994]数字三角形 Number Triangles 题目描述 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径&#xff0c;使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 在上面的样例中&#xff0c;从 7 → 3 → 8 →…

配置ansible自动化工具

自动化运维工具 Puppet : 用ruby语言写的 Saltstack : 用python写的,是一个模块化shell(就是命令),用的agent服务连接的被控端,用于大集群,高并发 ansible : 用python写的,也是模块化shell(就是命令),部署简单,不需要启动和安装agent等服务,用的ssh连接被控端,用于小集…

yolov8上使用gpu教程

yolov8上使用gpu教程 安装Cuda和Cudnnyolov8上使用gpu 安装Cuda和Cudnn 1.查看支持的cuda版本&#xff0c;并去官网下载。 nvidia-smi2.网址&#xff1a;https://developer.nvidia.com/cuda-toolkit-archive 3.安装细节 安装的前提基础是&#xff0c;有vs的C环境。我电脑有…

开始学习Vue2(组件的生命周期和数据共享)

一、组件的生命周期 1. 生命周期 & 生命周期函数 生命周期&#xff08;Life Cycle&#xff09;是指一个组件从创建 -> 运行 -> 销毁的整个阶段&#xff0c;强调的是一个时间段。 生命周期函数&#xff1a;是由 vue 框架提供的内置函数&#xff0c;会伴随着 组件…

Java算法 leetcode简单刷题记录3

Java算法 leetcode简单刷题记录3 汇总区间&#xff1a; https://leetcode.cn/problems/summary-ranges/ 把数据按照是否连续分组输出 主要是 n<nums.length-1 && nums[n]1nums[n] 最多可以摧毁的敌人城堡&#xff1a; https://leetcode.cn/problems/maximum-enemy-…

必知的量化交易基础

量化交易核心概念 量化思想 量化交易 量化交易是指以先进的数学模型代替人为的主观判断&#xff0c;利用计算机技术从庞大的历史数据中海选能带来超额收益的多种“大概率”事件以制定策略&#xff0c;极大地减少了投资者情绪波动的影响&#xff0c;避免在市场极度狂热或悲观的…