leetcode563
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int x) { val = x; }
* }
*/
public class Solution
{
/// <summary>
/// 遍历二叉树,存储节点列表
/// </summary>
Stack<TreeNode> S = new Stack<TreeNode>(); /// <summary>
/// 先序遍历二叉树
/// </summary>
/// <param name="node"></param>
private void postNode(TreeNode node)
{
if (node != null)
{
S.Push(node);
if (node.left != null)
{
postNode(node.left);
}
if (node.right != null)
{
postNode(node.right);
}
}
} /// <summary>
/// 以node为根节点的树的val之和
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
private int SumNode(TreeNode node)
{
int sum = ;
if (node != null)
{
sum += node.val;
if (node.left != null)
{
sum += SumNode(node.left);
} if (node.right != null)
{
sum += SumNode(node.right);
}
}
return sum;
} /// <summary>
/// 获取每个节点的tilt值
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
private int GetTilt(TreeNode node)
{
if (node == null)
{
return ;
}
else if (node.left == null && node.right == null)
{
return ;
}
else
{
//计算左子树sum需要遍历左子树,然后累加每个节点的值
var left = ;
if (node.left != null)
{
left = SumNode(node.left);
}
//计算右子树sum需要遍历右子树,然后累加每个节点的值
var right = ;
if (node.right != null)
{
right = SumNode(node.right);
}
//根节点的tilt等于左右子树sum之差,//因此需要计算左子树sum和右子树sum
var tilt = Math.Abs(left - right);
return tilt;
}
} public int FindTilt(TreeNode root)
{
if (root != null)
{
//先遍历每个节点
postNode(root); //获得节点列表
var list = S.ToList(); //计算每个节点的tilt,再加到一起
var sum = ;
foreach (var l in list)
{
sum += GetTilt(l);
}
return sum;
}
else
{
return ;
}
}
}
https://leetcode.com/problems/binary-tree-tilt/#/description
leetcode563的更多相关文章
- [Swift]LeetCode563. 二叉树的坡度 | Binary Tree Tilt
Given a binary tree, return the tilt of the whole tree. The tilt of a tree node is defined as the ab ...
- Leetcode563.Binary Tree Tilt二叉树的坡度
给定一个二叉树,计算整个树的坡度. 一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值.空结点的的坡度是0. 整个树的坡度就是其所有节点的坡度之和. 示例: 输入: 1 / ...
- LeetCode563. 二叉树的坡度
题目 1 class Solution { 2 public: 3 int ans = 0; 4 int findTilt(TreeNode* root) { 5 postOrder(root); 6 ...
随机推荐
- WEB前端性能优化常见方法
1.https://segmentfault.com/a/1190000008829958 (WEB前端性能优化常见方法) 2..https://blog.csdn.net/mahoking/arti ...
- MySQL中视图和普通表的区别
1.视图是数据库数据的特定子集.可以禁止所有用户访问数据库表,而要求用户只能通过视图操作数据,这种方法可以保护用户和应用程序不受某些数据库修改的影响. 2.视图是抽象的,他在使用时,从表里提取出数据, ...
- 前端构建工具 Grunt 入门
之前也介绍过前端构建工具 Ant 和 Yeoman,其中 Yeoman 工具就包含了 Grunt 所以就不多说.那么与 Ant 相比 Grunt 有这么几个优点: Javascript 语法,相比 A ...
- xtrabackup备份之增量备份(二)
测试了差不多一周的xtrabackup,本篇主要聊一下xtrabackup的增量备份.我一开始不是很了解,为什么每周都需要做全备份,每天都需要做增量备份,现在想想这个和技术无关.但是有一个新问题,如果 ...
- javascript: 数据类型深入理解
1.基本类型(值类型或者原始类型): Number.Boolean.String.NULL.Undefined以及ES6的Symbol2.引用类型:Object.Array.Function.Date ...
- phalcon 设置cookie一直是httponly导致前端读取不到cookie的值
解决办法: 修改配置如果不好使,则暂时降低phalcon版本为3.1.2. 注意设置cookie的参数secure的值为false,否则js还是读取不到cookie
- Server JRE 简介
Server JRE, 服务器版JRE JRE安装包, JDK安装包, 以及 Server JRE 压缩包, 在 Java SE Download 页面都可以下载: http://www.oracle ...
- HDU1501 dfs
像这样有维度的一定要记忆化啊........... #include<cstdio> #include<cstdlib> #include<iostream> #i ...
- Oozie_01安装教程【20161116】
说明:hadoop用的是hadoop-2.5.0-cdh5.3.6 Oozie用的是oozie-4.0.0-cdh5.3.6 该测试环境用户名为hadoop 主机名为hadoop01 2.4安装部署 ...
- 利用Web Services开发分布式应用
一.引言 在前面文章中分别介绍了MSMQ和.NET Remoting技术,今天继续分享.NET 平台下另一种分布式技术——Web Services 二.Web Services 详细介绍 2.1 We ...