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 ...
随机推荐
- c#LINQ表达树
如果你已经用过LINQ, 你应该知道函数方式,以及包含的丰富的类库, 如果你仍不了解, 那根据下面的链接去熟悉一下 the LINQ tutorial, lambda. 表达树提供了丰富的包含参数的 ...
- Total Defense Anti-Virus – 免费6个月
Total Defense Anti-Virus 具有病毒和间谍软件保护,免费的专家远程安装和设置,快速扫描引擎不会拖慢电脑速度,基于云保护.高级Rootkit保护,自动扫描驱动器和内存等等.官方网站 ...
- kill与kill -9的区别
有时候我们使用kill无法杀掉一个进程,但是用kill -9却可以,why? 首先看一下kill的功能,man手册对kill描述如下: KILL(1) Linux User's Manual KILL ...
- please complete all spokes before continuing 提示
解决方法:输入“1”,按Enter键输入“2”,按Enter键输入“q",按Enter键输入“yes”,按Enter键
- RF/GBDT/XGBoost/LightGBM简单总结(完结)
这四种都是非常流行的集成学习(Ensemble Learning)方式,在本文简单总结一下它们的原理和使用方法. Random Forest(随机森林): 随机森林属于Bagging,也就是有放回抽样 ...
- mysql中的隐式转换
在mysql查询中,当查询条件左右两侧类型不匹配的时候会发生隐式转换,可能导致查询无法使用索引.下面分析两种隐式转换的情况 看表结构 phone为 int类型,name为 varchar EXPLAI ...
- 《FDTD electromagnetic field using MATLAB 》读书笔记001-差商种类
有限差分就是用差商代替微商,有3钟: 1.向前差商 2.向后差商 3.中心差商 上面三张途中虚线就是函数在x的精确微商(偏导数),直线就是用来代替精确 微商的差商格式.
- vue-cli 本地开发mock数据使用方法
vue-cli 中可以通过配置 proxyTable 解决开发环境的跨域问题,具体可以参考这篇文章: Vue-cli proxyTable 解决开发环境的跨域问题 如果后端接口尚未开发完成,前端开发一 ...
- 设计模式(Python)-简单工厂,工厂方法和抽象工厂模式
本系列文章是希望将软件项目中最常见的设计模式用通俗易懂的语言来讲解清楚,并通过Python来实现,每个设计模式都是围绕如下三个问题: 为什么?即为什么要使用这个设计模式,在使用这个模式之前存在什么样的 ...
- eclipse adt logcat过滤用法
点击Save Filters的加号,by Log Tag如下就可以只看2dx程序出来的debug信息了