/**
* 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. PHP-----------HTTP请求的第三方接口

    开发中常常遇到接口请求这个功能,后台也不例外,因为遇到了,所以写一篇. 前段时间做商城后台时,需要用到第三方物流接口查询物流信息. post: /**** * @param $url * @param ...

  2. mongodb 之linux下安装、启动、停止、连接

    今天在linux上面安装了mongodb 1.下载linux的mongodb 2.在目录usr/local下创建文件夹mongodb,把安装包解压到该文件夹中 # mkdir mongodb # ta ...

  3. 非ie浏览器必备函数常识

    场景描述: 我们都知道IE浏览器和非IE浏览器都有很多功能一样但写法不同,或者各自都有一些自己独特的方法,那么为了保持兼容性和便于编写,我们可以通过这两个方法给非IE浏览器的对象增加自己没有,但IE有 ...

  4. 006——php字符串中的处理函数(五)

    <?php /** * 一.addslashes() 在预定义字符串前添加反斜杠 * * stripslashes() 把转义字符串前的反斜杠删除 * get_magic_quotes_gpc( ...

  5. AutoFac IoC DI 依赖注入

    AutoFac IoC DI 依赖注入 记录点点滴滴知识,为了更好的服务后来者! 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌 ...

  6. Java Web编程的主要组件技术——Hibernate核心组件

    参考书籍:<J2EE开源编程精要15讲> Hibernate配置文件 1) hibernate.cfg.xml <?xml version='1.0' encoding='UTF-8 ...

  7. 几句话概括理查德成熟度模型(RESTful)

    近期做的项目中准备引入RESTful风格,特地进行了一些学习,其中比较重点的有一个理查德成熟度模型(Richardson Maturity Model),模型提出了四个等级(0-3),如下图 其中只有 ...

  8. UT源码+105032014070

    设计三角形问题的程序 输入三个整数a.b.c,分别作为三角形的三条边,现通过程序判断由三条边构成的三角形的类型为等边三角形.等腰三角形.一般三角形(特殊的还有直角三角形),以及不构成三角形.(等腰直角 ...

  9. java阳历转农历

    package com.reading.task; import java.text.ParseException;import java.text.SimpleDateFormat;import j ...

  10. 2018-2019-1 20165212 《信息安全系统设计基础》第八周学习总结(pwd)

    2018-2019-1 20165212 <信息安全系统设计基础>第八周学习总结 一.知识点总结 1.三种并发方式 构造并发程序的方法有三种: 进程 线程 I/O多路复用 进程:用内核来调 ...