get (tree node val - (subtree val sum))

2024-01-04 12:08
文章标签 node tree get sum val subtree

本文主要是介绍get (tree node val - (subtree val sum)),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

给一个tree,返回每个点左右子树的和与自己值的差,用递归做,还问了不递归怎么做

package tree;import java.util.*;import z_dataStructure.TreeNode;public class TreeNodeMinusSubtreeSum {public static void main(String[] args) {TreeNode root = new TreeNode(1);TreeNode node2 = new TreeNode(2);TreeNode node3 = new TreeNode(3);TreeNode node4 = new TreeNode(4);TreeNode node5 = new TreeNode(5);root.left = node2;root.right = node3;node3.left = node4;node3.right = node5;for (int subsum : treeNodeWithSubtreeSum(root)) {System.out.println(subsum);}ArrayList<Integer> res = new ArrayList<Integer>();treeNodeWithSubtreeSum1(root, res);for (int subsum : res) {System.out.println(subsum);}}public static int treeNodeWithSubtreeSum1(TreeNode root, ArrayList<Integer> res){if (root == null) {return 0;}int leftSubtree = treeNodeWithSubtreeSum1(root.left, res);int rightSubtree = treeNodeWithSubtreeSum1(root.right, res);int sum = root.val - leftSubtree - rightSubtree;res.add(sum);return root.val + leftSubtree + rightSubtree;}public static ArrayList<Integer> treeNodeWithSubtreeSum(TreeNode root) {ArrayList<Integer> ret = new ArrayList<Integer>();if (root == null)return ret;Stack<TreeNode> s = new Stack<TreeNode>();HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();s.add(root);TreeNode pre = null;while (!s.isEmpty()) {TreeNode cur = s.peek();if (pre == null || pre.left == cur || pre.right == cur) {if (cur.left != null) {s.push(cur.left);} else if (cur.right != null) {s.push(cur.right);} else {s.pop();map.put(cur.val, 0);ret.add(cur.val - map.get(cur.val));}} else if (cur.left == pre) {if (cur.right != null) {map.put(cur.val, map.get(pre.val) + pre.val);s.push(cur.right);} else {s.pop();map.put(cur.val, map.get(pre.val) + pre.val);ret.add(cur.val - map.get(cur.val));}} else if (cur.right == pre) {s.pop();int tmp = 0;if (map.containsKey(cur.val))tmp = map.get(cur.val);tmp += map.get(pre.val) + pre.val;map.put(cur.val, tmp);ret.add(cur.val - map.get(cur.val));}pre = cur;}return ret;}
}


这篇关于get (tree node val - (subtree val sum))的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/569279

相关文章

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

PyTorch中cdist和sum函数使用示例详解

《PyTorch中cdist和sum函数使用示例详解》torch.cdist是PyTorch中用于计算**两个张量之间的成对距离(pairwisedistance)**的函数,常用于点云处理、图神经网... 目录基本语法输出示例1. 简单的 2D 欧几里得距离2. 批量形式(3D Tensor)3. 使用不

VSCode中配置node.js的实现示例

《VSCode中配置node.js的实现示例》本文主要介绍了VSCode中配置node.js的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一.node.js下载安装教程二.配置npm三.配置环境变量四.VSCode配置五.心得一.no

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

Gin框架中的GET和POST表单处理的实现

《Gin框架中的GET和POST表单处理的实现》Gin框架提供了简单而强大的机制来处理GET和POST表单提交的数据,通过c.Query、c.PostForm、c.Bind和c.Request.For... 目录一、GET表单处理二、POST表单处理1. 使用c.PostForm获取表单字段:2. 绑定到结

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N