/**
* 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的更多相关文章

  1. [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 ...

  2. Leetcode563.Binary Tree Tilt二叉树的坡度

    给定一个二叉树,计算整个树的坡度. 一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值.空结点的的坡度是0. 整个树的坡度就是其所有节点的坡度之和. 示例: 输入: 1 / ...

  3. LeetCode563. 二叉树的坡度

    题目 1 class Solution { 2 public: 3 int ans = 0; 4 int findTilt(TreeNode* root) { 5 postOrder(root); 6 ...

随机推荐

  1. WEB前端性能优化常见方法

    1.https://segmentfault.com/a/1190000008829958 (WEB前端性能优化常见方法) 2..https://blog.csdn.net/mahoking/arti ...

  2. MySQL中视图和普通表的区别

    1.视图是数据库数据的特定子集.可以禁止所有用户访问数据库表,而要求用户只能通过视图操作数据,这种方法可以保护用户和应用程序不受某些数据库修改的影响. 2.视图是抽象的,他在使用时,从表里提取出数据, ...

  3. 前端构建工具 Grunt 入门

    之前也介绍过前端构建工具 Ant 和 Yeoman,其中 Yeoman 工具就包含了 Grunt 所以就不多说.那么与 Ant 相比 Grunt 有这么几个优点: Javascript 语法,相比 A ...

  4. xtrabackup备份之增量备份(二)

    测试了差不多一周的xtrabackup,本篇主要聊一下xtrabackup的增量备份.我一开始不是很了解,为什么每周都需要做全备份,每天都需要做增量备份,现在想想这个和技术无关.但是有一个新问题,如果 ...

  5. javascript: 数据类型深入理解

    1.基本类型(值类型或者原始类型): Number.Boolean.String.NULL.Undefined以及ES6的Symbol2.引用类型:Object.Array.Function.Date ...

  6. phalcon 设置cookie一直是httponly导致前端读取不到cookie的值

    解决办法: 修改配置如果不好使,则暂时降低phalcon版本为3.1.2. 注意设置cookie的参数secure的值为false,否则js还是读取不到cookie

  7. Server JRE 简介

    Server JRE, 服务器版JRE JRE安装包, JDK安装包, 以及 Server JRE 压缩包, 在 Java SE Download 页面都可以下载: http://www.oracle ...

  8. HDU1501 dfs

    像这样有维度的一定要记忆化啊........... #include<cstdio> #include<cstdlib> #include<iostream> #i ...

  9. Oozie_01安装教程【20161116】

    说明:hadoop用的是hadoop-2.5.0-cdh5.3.6 Oozie用的是oozie-4.0.0-cdh5.3.6 该测试环境用户名为hadoop  主机名为hadoop01 2.4安装部署 ...

  10. 利用Web Services开发分布式应用

    一.引言 在前面文章中分别介绍了MSMQ和.NET Remoting技术,今天继续分享.NET 平台下另一种分布式技术——Web Services 二.Web Services 详细介绍 2.1 We ...