关于二叉树深搜的算法v2.1

devtools/2025/1/17 14:01:09/
  1. 2331. 计算布尔二叉树的值

 

1、宏观

        给定一个根节点,在进行运算结果前首先要知道该根节点左子树的整体结果和右子树的整体结果才能进行运算。

2、细节dfs

        从上往下遍历,从下往上计算,遍历停止开始算的结果是遍历到叶子结点。 

java">class Solution {public boolean evaluateTree(TreeNode root) {if(root.left == null ){return root.val == 0?false:true;}boolean left = evaluateTree(root.left);boolean right = evaluateTree(root.right);return root.val == 2? left | right :left & right;}
}
  1. 2.129. 求根节点到叶节点数字之和

1、到5的时候首先要将12传入;

2、其次将12变成125,传入到左子树8和右子树9;

3、8和9返回他们作为根节点被其子树返回的数之和;

4、5节点将自己的子树和返回给自己的上级; 

java">class Solution {public int sumNumbers(TreeNode root) {return dfs(root,0);}public int dfs(TreeNode root,int preSum){preSum = preSum*10 + root.val;if(root.left == null && root.right == null){return preSum;}int ret = 0;if(root.left != null){ret += dfs(root.left,preSum);}if(root.right != null){ret += dfs(root.right,preSum);}return ret;}
}

814. 二叉树剪枝

java">class Solution {public TreeNode pruneTree(TreeNode root) {if(root== null){return null;}root.left = pruneTree(root.left);root.right = pruneTree(root.right);if(root.left == null && root.right == null && root.val == 0){root = null;}return root;}
}

  验证二叉搜索树

 

 解题性质:二叉搜索树中序遍历的结果,是一个有序的序列。设置全局变量prev=-无穷;

法一:左子树是二叉搜索树,右子树也是二叉搜索树,当前根节点所在的树也是二叉搜索树。

java">class Solution {long p =  Long.MIN_VALUE;public boolean isValidBST(TreeNode root) {if(root == null){return true;}boolean left = isValidBST(root.left);boolean cur = false;if(root.val > p){cur = true;}p = root.val;boolean right =isValidBST(root.right);return left && right && cur;}
}

法二:减枝

java">class Solution {long p =  Long.MIN_VALUE;public boolean isValidBST(TreeNode root) {if(root == null){return true;}boolean left = isValidBST(root.left);if(left == false){return false;}boolean cur = false;if(root.val > p){cur = true;}if(cur ==false){return false;}p = root.val;boolean right =isValidBST(root.right);return left && right && cur;}
}

 二叉搜索树中第K小的元素

 

中序遍历+两个全局变量 

 

java">class Solution {int count ;//计数int ret;//存值public int kthSmallest(TreeNode root, int k) {count = k;dfs(root);return ret;}void dfs(TreeNode root){if(root == null || count == 0){return;}dfs(root.left);count--;if(count == 0){ret = root.val;return;}dfs(root.right);}
}
  1. 257. 二叉树的所有路径

 

java">/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {List<String> ret;public List<String> binaryTreePaths(TreeNode root) {ret = new ArrayList<>();dfs(root,new StringBuffer());return ret;}void dfs(TreeNode root,StringBuffer path1){StringBuffer path = new StringBuffer(path1);path.append(Integer.toString(root.val));if(root.left == null && root.right == null){ret.add(path.toString());return;}path.append("->");if(root.left != null){dfs(root.left,path);}if(root.right != null){dfs(root.right,path);}}
}

ps:谢谢观看。


http://www.ppmy.cn/devtools/151292.html

相关文章

【微服务】SpringBoot 通用异常处理方案使用详解

目录 一、前言 二、SpringBoot 异常介绍 2.1 SpringBoot 中异常定义 2.1.1 SpringBoot 异常处理机制的重要性 2.2 常用的异常分类 2.3 常用的异常处理解决方案 三、springboot 异常处理操作实践 3.1 springboot自适应错误处理机制 3.1.1 使用默认错误页面 3.1.2 自定义…

Windows部署NVM并下载多版本Node.js的方法(含删除原有Node的方法)

本文介绍在Windows电脑中&#xff0c;下载、部署NVM&#xff08;node.js version management&#xff09;环境&#xff0c;并基于其安装不同版本的Node.js的方法。 在之前的文章Windows系统下载、部署Node.js与npm环境的方法&#xff08;https://blog.csdn.net/zhebushibiaoshi…

4.Proto 3 语法详解

目录 proto 3 语法详解字段规则消息类型的定义与使用创建通讯录2.0版本enum类型升级通讯录至2.1版本Any类型升级通讯录至2.2版本oneof类型升级通讯录至2.3版本map类型升级通讯录至2.4版本默认值更新消息保留字段reserved创建通讯录3.0版本未知字段升级通讯录3.1版本前后兼容性选…

Java中JavaSE与JavaEE的区别

文章目录 Java中JavaSE与JavaEE的区别一、引言二、功能定位与应用场景1、JavaSE2、JavaEE 三、开发与部署1、JavaSE2、JavaEE 四、使用示例五、JavaEE常用框架1. Spring框架示例代码&#xff1a; 2. Hibernate框架示例代码&#xff1a; 3. Struts框架示例代码&#xff1a; 4. M…

Mac的`~键打出来±§`?解析ANSI、ISO、JIS键盘标准的区别与布局

注&#xff1a;本文由deepseek生成&#xff0c;只进行了基本的校对。 引言 在使用Mac时&#xff0c;你是否遇到过这样的问题&#xff1a;按下~键&#xff0c;却输出了或&#xff1f;这其实是因为你的键盘类型设置与物理键盘布局不匹配。Mac支持多种键盘标准&#xff0c;包括A…

Spring AI 对话记忆

对话记忆功能是一种技术&#xff0c;使得应用程序或智能助手能够在一段时间内“记住”用户提供的信息&#xff0c;以便在后续对话中参考和使用。这种记忆可以让对话更加连贯&#xff0c;并使助手能够理解用户的背景和偏好&#xff0c;从而提供更加个性化和精准的回复。 对话记…

springboot基于Java的任务管理系统

Springboot基于Java的任务管理系统是一种高效、灵活且易于维护的项目管理工具&#xff0c;它结合了Springboot框架的强大功能和Java语言的稳定性与安全性。 一、系统概述 任务管理系统是一种用于跟踪和管理项目中各种任务和工作的应用程序&#xff0c;它可以帮助团队成员更好…

android T 建立文件夹及文件的记录

第一&#xff1a;AndroidManifest.xml 中整体给予apk权限&#xff0c;如此加入后&#xff0c;在android的settings中&#xff0c;可以找到app.手动给予静态的权限&#xff0c;但是app不一定能使用&#xff0c;请大神指导为什么&#xff1f; <uses-permission android:name&q…