C# 实现包含二叉搜索树每个深度的所有节点的链表

C# 实现包含二叉搜索树每个深度的所有节点的链表,c#,linked-list,binary-search-tree,C#,Linked List,Binary Search Tree,我要解决关于破解编码面试问题的问题 给定一个二元搜索树,设计一个算法,创建每个深度的所有节点的链表(即,如果有一个深度为D的树,则有D个链表) 我很好奇我将如何实现一个链表来显示我一直在工作的当前代码的深度 class Program { static void Main(string[] args) { BinarySearchTree bst = new BinarySearchTree(); object[] arr = { 50, 30,

我要解决关于破解编码面试问题的问题 给定一个二元搜索树,设计一个算法,创建每个深度的所有节点的链表(即,如果有一个深度为D的树,则有D个链表)

我很好奇我将如何实现一个链表来显示我一直在工作的当前代码的深度

class Program
{
    static void Main(string[] args)
    {
        BinarySearchTree bst = new BinarySearchTree();
        object[] arr = { 50, 30, 55, 25, 35, 52, 60, 10, 32, 37, 65, 15 };
        bst.AddRange(arr);

        int level = 1;
        string nodeValues = FindNodeValuesAtLevel(bst.Root, level);
        Console.WriteLine("Nodes at level " + level + ": " + nodeValues);


        Console.Read();
    }
    static string FindNodeValuesAtLevel(BSTNode root, int level)
    {
        StringBuilder nodeValuesAtLevel = new StringBuilder();
        RM_FindNodeValuesAtLevel(root, level, 0, nodeValuesAtLevel);
        return nodeValuesAtLevel.ToString();
    }

    static void RM_FindNodeValuesAtLevel(BSTNode node, int targetLevel, int curLevel, StringBuilder itemsAtLevel)
    {

        if (node == null) // stopping condition
            return;
        else // recursive step
        {
            // get node value at the target level
            if (curLevel == targetLevel)
            {
                itemsAtLevel.Append(node.NodeValue + " ");
            }

            // traverse the left node at the next level
            RM_FindNodeValuesAtLevel(node.Left, targetLevel, curLevel + 1, itemsAtLevel);
            // traverse the right node at the next level
            RM_FindNodeValuesAtLevel(node.Right, targetLevel, curLevel + 1, itemsAtLevel);

        }
    }

}
这里有一个想法:

按顺序穿过树。由于您知道何时进入子树,因此可以简单地跟踪正在访问的每个节点的高度。对于您访问的高度为
k
的每个节点,将其添加到链接列表
k
。如果还没有高度
k
的链表,请创建一个空链表并将其添加到链表列表/数组中