问题描述
鉴于这个代表一棵树的类,我对如何返回一个由树的高度组成的节点组成的列表感到有些困惑。
false
我正在谈论的函数是“ LongestPathNodes”函数,我认为它必须是递归的,我写了其中的一部分,但是鉴于树没有这样的事实,我对应该如何进行感到困惑必须是二进制的。
解决方法
定义一个Height
属性:
public int Height =>
m_Children != null && m_Children.Any()
? m_Children.Max(x => x.Height) + 1
: 1;
现在,您可以从任何给定节点返回最长分支的节点:
public IEnumerable<TreeNode<T>> LongestPathNodes()
{
yield return this;
var children = m_Children?
.OrderByDescending(x => x.Height)
.FirstOrDefault()?
.LongestPathNodes();
if (children != null)
{
foreach (var child in children) yield return child;
}
}
如果您需要以List<T>
的身份使用它,则它是LINQ单线:
var list = node.LongestPathNodes().Select(x => x.m__Data).ToList();