返回从树的根到普通树中的叶子的最长路径的一部分的项目列表

问题描述

鉴于这个代表一棵树的类,我对如何返回一个由树的高度组成的节点组成的列表感到有些困惑。

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();