Set Deepth for each tree node of a forest
TreeNode Entity:
public class TreeNode
{
public string Name { get; set; }
public TreeNode ParrentNode { get; set; }
public List<TreeNode> LstChildren { get; set; }
public int Deep { get; set; }
public void AddChildren(TreeNode node)
{
LstChildren.Add(node);
node.ParrentNode = this;
}
}
SetTreeDeepth:
#region tree
public void SetTreeDeep(TreeNode current)
{
current.Deep = GetDeepth(current);
if (!current.LstChildren.Any())
return;
foreach (var children in current.LstChildren)
{
SetTreeDeep(children);
}
}
public int GetDeepth(TreeNode node)
{
if (node == null)
return 0;
if (node.LstChildren.Any())
{
var deepArr = node.LstChildren.Select(GetDeepth).ToList();
var maxChildDeep = deepArr.Max() + 1;
return maxChildDeep;
}
return 0;
}
#endregion
Test Method:
[TestMethod]
public void SetTreeDeep()
{
// root
// / | \
// t1 t2 t3
// / \ / \
// t4 t5 t6 t7
// / \ \
// 8 9 t10
var nodeLst = new List<TreeNode>
{
new TreeNode() {Name = "Root", LstChildren = new List<TreeNode>(), Deep = 0, ParrentNode = null},
new TreeNode() { Name = "T1", LstChildren = new List<TreeNode>(), Deep = 0 },
new TreeNode() { Name = "T2", LstChildren = new List<TreeNode>(), Deep = 0 },
new TreeNode() { Name = "T3", LstChildren = new List<TreeNode>(), Deep = 0 },
new TreeNode() { Name = "T4", LstChildren = new List<TreeNode>(), Deep = 0 },
new TreeNode() { Name = "T5", LstChildren = new List<TreeNode>(), Deep = 0 },
new TreeNode() { Name = "T6", LstChildren = new List<TreeNode>(), Deep = 0 },
new TreeNode() { Name = "T7", LstChildren = new List<TreeNode>(), Deep = 0 },
new TreeNode() { Name = "T8", LstChildren = new List<TreeNode>(), Deep = 0 },
new TreeNode() { Name = "T9", LstChildren = new List<TreeNode>(), Deep = 0 },
new TreeNode() { Name = "T10", LstChildren = new List<TreeNode>(), Deep = 0 }
};
nodeLst[7].AddChildren(nodeLst[10]);
nodeLst[3].AddChildren(nodeLst[6]);
nodeLst[3].AddChildren(nodeLst[7]);
nodeLst[0].AddChildren(nodeLst[3]);
nodeLst[0].AddChildren(nodeLst[2]);
nodeLst[5].AddChildren(nodeLst[8]);
nodeLst[5].AddChildren(nodeLst[9]);
nodeLst[1].AddChildren(nodeLst[4]);
nodeLst[1].AddChildren(nodeLst[5]);
nodeLst[0].AddChildren(nodeLst[1]);
var stds = new SetTreeDeepSample();
stds.SetTreeDeep(nodeLst[0]);
var ret = String.Join(",", nodeLst.Select(n => n.Deep).ToArray());
//expected result :3,2,0,2,0,1,0,1,0,0,0
}
分享到:
相关推荐
《CSS in Depth》它对新手来说,学习css会是一个很好的介绍。这本书是前端开发人员应该知道的关于样式表的所有事情。你还可以找到CSS Grid,CSS模块化和模式库的综合部分。
落叶冰点万能企业网站生成系统...((deepth="&deepth222&" and ((parent_id_list like '%"&pid_list222&"%') or (parent_id='"&rs("id")&"')) 本系统后台路径: /admin/index.asp 后台用户名: admin 后台密码: admin
基于CNN和Kinect进行动作识别matlab...deepth map是在深度图上绘制骨骼点; vid skeleton是动态显示骨架线; SkeletonView 是绘制骨架线的函数; 文件夹内的get_poin_data是直接得到骨骼点数据,存储并用来训练pb神经网络;
$ website-fetcher website-fetcher 适用于抓取文档类型网站的小工具 用法: website-fetcher [-dir|-count|-deepth|-all|-help] URL -all=false: 是否要抓取整个网站,默认只抓取指定URL以下的网页 -deepth=16: 限制...
matlab++显示代码行数 ...deepth map是在深度图上绘制骨骼点; vid skeleton是动态显示骨架线; SkeletonView 是绘制骨架线的函数; 文件夹内的get_poin_data是直接得到骨骼点数据,存储并用来训练pb神经网络;