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

相关文章

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

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

SpringBoot中Get请求和POST请求接收参数示例详解

《SpringBoot中Get请求和POST请求接收参数示例详解》文章详细介绍了SpringBoot中Get请求和POST请求的参数接收方式,包括方法形参接收参数、实体类接收参数、HttpServle... 目录1、Get请求1.1 方法形参接收参数 这种方式一般适用参数比较少的情况,并且前后端参数名称必须

最大流=最小割=最小点权覆盖集=sum-最大点权独立集

二分图最小点覆盖和最大独立集都可以转化为最大匹配求解。 在这个基础上,把每个点赋予一个非负的权值,这两个问题就转化为:二分图最小点权覆盖和二分图最大点权独立集。   二分图最小点权覆盖     从x或者y集合中选取一些点,使这些点覆盖所有的边,并且选出来的点的权值尽可能小。 建模:     原二分图中的边(u,v)替换为容量为INF的有向边(u,v),设立源点s和汇点t

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

Node Linux相关安装

下载经编译好的文件cd /optwget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gztar -xvf node-v10.15.3-linux-x64.tar.gzln -s /opt/node-v10.15.3-linux-x64/bin/npm /usr/local/bin/ln -s /opt/nod

树(Tree)——《啊哈!算法》

树 什么是树?树是一种特殊的图,不包含回路的连通无向树。 正因为树有着“不包含回路”这个特点,所以树就被赋予了很多特性。 一棵树中的任意两个结点有且仅有唯一的一条路径连通。一棵树如果有n个结点,那么它一定恰好有n-1条边。在一棵树中加一条边将会构成一个回路。 一棵树有且只有一个根结点。 没有父结点的结点称为根结点(祖先)。没有子结点的结点称为叶结点。如果一个结点既不是根结点也不是叶