如何解决返回从树的根到普通树中的叶子的最长路径的一部分的项目列表
鉴于这个代表一棵树的类,我对如何返回一个由树的高度组成的节点组成的列表感到有些困惑。
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();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。