C#算法实现获取树的高度
我们知道,树类型作为数据结构中的重要一员,树的很多实现都是来自递归。本文想要实现的就是在桌面客户端项目开发中,经常用到的树结构(.Net平台下有个控件为TreeView)。事实上,我们可能因业务需求自行定义一个树类型的数据结构。
接下来,首先给出我一开始用来获取树的深度的算法实现(存在欠缺)
{
var reportTemplate = reportTemplateTree.ReportTemplate;
int childrenCount = reportTemplateTree.Children.Count();
if (childrenCount > 0)
{
++reportTemplateTreeDepth;
for (int j = 0; j < childrenCount; j++)
{
GetExportReportTemplateColumns(reportTemplateTree.Children[j], reportTemplateTreeDepth, treeDepthMark);
}
}
else
{
if (+treeDepthMark < reportTemplateTreeDepth) treeDepthMark = reportTemplateTreeDepth;
}
return treeDepthMark == 0 ? reportTemplateTreeDepth + 2 : treeDepthMark + 2;
}
上面这个算法,获取的是实时的树下的子节点高度,最终无法实现返回子树的最大高度值作为该树的高度。
后经查阅资料,改进如下:
{
int reportTemplateTreeDepth = 0;
if (reportTemplateTree.Children.Count == 0)
return 1;
else
{
foreach (var reportTemplate in reportTemplateTree.Children)
{
int subReportTemplateTreeDepth = GetExportReportTemplateTreeDepth(reportTemplate);
if (subReportTemplateTreeDepth > reportTemplateTreeDepth) reportTemplateTreeDepth = subReportTemplateTreeDepth;
}
return reportTemplateTreeDepth + 1;
}
}
这里要提醒一下,计算树的高度之类的算法实现,需要首先弄清楚高度的概念:从根结点开始算起。
C#算法实现获取树的高度的更多相关文章
- 数据结构与算法:AVL树
AVL树 在计算机科学中,AVL树是最先发明的自平衡二叉查找树.在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树.增加和删除可能需要通过一次或多次树旋转来重新平衡这个树.AV ...
- [算法]从Trie树(字典树)谈到后缀树
我是好文章的搬运工,原文来自博客园,博主July_,地址:http://www.cnblogs.com/v-July-v/archive/2011/10/22/2316412.html 从Trie树( ...
- 如何知道btree树的高度
来自网络,总结到这里: 当我想看btree树高度的时候,筛选出来这篇文章"为什么 B-tree 在不同著作中度的定义有一定差别?",知道了高度的算法是这个公式:但是里面又提高t和出 ...
- Android进阶笔记18:Android 获取Button的高度、宽度、坐标值
1. 问题 如何获取一个控件的长和高,相信很多朋友第一眼看见这个问题都会觉得很简单,直接在onCreate里面调用getWidth.getMeasuredWidth不就可以获得了吗,但是,事实上是并没 ...
- 二叉树实例学习(四)——获取节点的高度函数getHight()
树T中所有节点深度的最大值称为该树的高度(height),实际上每个节点与其所有子节点都可以看做一颗树,也就是说除了根结点,所有子结点都可以看做是一颗子树,因此每个结点都有树高.在本程序中约定,仅含单 ...
- iOS之 利用通知(NSNotificationCenter)获取键盘的高度,以及显示和隐藏键盘时修改界面的注意事项
我们在开发中会遇到这样的情况:调用键盘时需要界面有一个调整,避免键盘遮掩输入框. 但实现时你会发现,在不同的手机上键盘的高度是不同的.这里列举一下: //获取键盘的高度 /* iphone 6: 中文 ...
- 动态获取div的高度 随着窗口变化而变化
// 1.jq法 <script> var winHeight = $(window).height(); $("#show").css("height&qu ...
- Android 动态获取ListView的高度
public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = l ...
- jquery获取高度错误(可以获取到宽度,但获取不到高度),及解决办法
<div class="foo"> <div style="display: none;"> 3333333 </div> ...
随机推荐
- SPA中前端路由基本原理与实现方式
SPA 前端路由原理与实现方式 通常 SPA 中前端路由有2中实现方式,本文会简单快速总结这两种方法及其实现: 修改 url 中 Hash 利用 H5 中的 history Hash 我们都知道 ur ...
- 一个轻量级的基于 .NET Core 的 ORM 框架 HSQL
HSQL 是一种轻量级的基于 .NET Core 的数据库对象关系映射「ORM」框架 HSQL 是一种可以使用非常简单且高效的方式进行数据库操作的一种框架,通过简单的语法,使数据库操作不再成为难事.目 ...
- 关于使用layui中的tree的一个坑
最近几天,因为项目需要,所以自学了下layui,在使用之前就对其比较感兴趣,毕竟封装的东西也不错(个人见解),在接触到layui之后,现在有个需要就是将部门做成tree的样子,开始觉得不怎么难,毕竟都 ...
- 修复Nginx的WebDAV功能
如果想使用WebDAV来实现文件共享,尤其是想使用操作系统内置功能来挂载文件系统的话,省心的话还是用Apache吧. 下文介绍如何用Nginx来实现这个目标.Windows内置的客户端是Microso ...
- 盘点Mac上搭建本地WebServer的几种方式
第一种: 通过Nginx搭建本地WebServer 安装nginx brew install nginx 安装完后在终端输入nginx指令,启动nginx查看效果 确定安装好之后,在根目录创建一个文件 ...
- 2653 区间xor
前言 这个题目在我之前那篇c++位运算的的随笔中提到过. 有兴趣的话去看看吧! 飞机场:https://www.cnblogs.com/laoguantongxiegogofs/p/12444517. ...
- Java 并发系列之一
Java 并发系列之一 简单的总结了一些 Java 常用的集合之后,发现许多集合都针对多线程提供了支持,比如 ConcurrentHashMap 使用分段锁来提高多线程环境下的性能表现与安全表现.所以 ...
- BERT实现QA中的问句语义相似度计算
1. BERT 语义相似度 BERT的全称是Bidirectional Encoder Representation from Transformers,是Google2018年提出的预训练模型,即双 ...
- 修改js文件,引发的404问题
记录一个bug,本地测不出来,客户后台却404,web测试可参考.(不知道是不是通用的) 先介绍下背景 我们是web产品,存在发布机.管理机.js文件,页面会引用到这些js文件.出于安全考虑,规定js ...
- 将xml处理为json对象数组
function xmlStr2js(xmlStr) { var tagNames = xmlStr.match(/<\w+>/g) tagNames = deWeightTagNames ...