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

相关文章

最大流=最小割=最小点权覆盖集=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条边。在一棵树中加一条边将会构成一个回路。 一棵树有且只有一个根结点。 没有父结点的结点称为根结点(祖先)。没有子结点的结点称为叶结点。如果一个结点既不是根结点也不是叶

如何导入sun.misc.BASE64Encoder和sum.misc.BASE64Decoder

右击项目名--->Build Path--->Configure Build Path...--->java Build Path--->Access rules:1 rule defined,added to all librar...   --->Edit --->Add...

10 Source-Get-Post-JsonP 网络请求

划重点 使用vue-resource.js库 进行网络请求操作POST : this.$http.post ( … )GET : this.$http.get ( … ) 小鸡炖蘑菇 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-w

API28_OKgo_get注意事项

1: implementation 'com.lzy.net:okgo:2.1.4' 2:在BaseApplication中onCreate()中初始化initOKgo() private void initOKgo() {//---------这里给出的是示例代码,告诉你可以这么传,实际使用的时候,根据需要传,不需要就不传-------------//HttpHeaders headers

在Debian 8上安装Node.js的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 Node.js 是一个通用编程的 JavaScript 平台,允许用户快速构建网络应用程序。通过在前端和后端都使用 JavaScript,开发可以更加一致,并且可以在同一个系统中设计。 在本指南中,您将在 Debian 8 服务器上安装 Node.js。Debian 8 包含一个版本的

使用Node-API进行异步任务开发

一、Node-API异步任务机制概述         Node-API异步任务开发主要用于执行耗时操作的场景中使用,以避免阻塞主线程,确保应用程序的性能和响应效率。         1、应用场景: 文件操作:读取大型文件或执行复杂的文件操作时,可以使用异步工作项来避免阻塞主线程。网络请求:当需要进行网络请求并等待响应时,可以使用异步工作项来避免阻塞主线程,从而提高应用程序的响应性能。数据库操

226 Invert Binary Tree

//226 Invert Binary Tree//算法思路:主要使用递归算法public class Solution {public TreeNode invertTree(TreeNode root) {//1 出口 空节点if (root==null)return null;//2 递归 调用自己TreeNode left = root.left;TreeNode right = ro