温馨提示×

c# removeall怎样进行递归深度控制

c#
小樊
81
2024-11-30 02:32:15
栏目: 编程语言

在C#中,要执行递归操作并控制深度,可以使用递归方法并添加一个计数器来跟踪递归深度。以下是一个示例:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var root = new TreeNode(1);
        root.Children.Add(new TreeNode(2));
        root.Children.Add(new TreeNode(3));
        root.Children.Add(new TreeNode(4));
        root.Children[0].Children.Add(new TreeNode(5));
        root.Children[0].Children.Add(new TreeNode(6));
        root.Children[1].Children.Add(new TreeNode(7));
        root.Children[1].Children.Add(new TreeNode(8));

        int maxDepth = 2;
        RemoveAll(root, maxDepth);
        PrintTree(root, 0);
    }

    static void RemoveAll(TreeNode node, int maxDepth)
    {
        if (node == null || maxDepth <= 0)
        {
            return;
        }

        // 移除当前节点的所有子节点
        while (node.Children.Count > 0)
        {
            var child = node.Children[0];
            RemoveAll(child, maxDepth - 1);
            node.Children.RemoveAt(0);
        }
    }

    static void PrintTree(TreeNode node, int depth)
    {
        if (node == null)
        {
            return;
        }

        for (int i = 0; i < depth; i++)
        {
            Console.Write("  ");
        }

        Console.WriteLine(node.Value);
        PrintTree(node.Children[0], depth + 1);
    }
}

class TreeNode
{
    public int Value { get; set; }
    public List<TreeNode> Children { get; set; }

    public TreeNode(int value)
    {
        Value = value;
        Children = new List<TreeNode>();
    }
}

在这个示例中,我们定义了一个RemoveAll方法,它接受一个TreeNode和一个最大深度maxDepth作为参数。该方法递归地遍历树并移除所有子节点,直到达到最大深度。PrintTree方法用于打印树的结构,以便我们可以验证RemoveAll方法是否按预期工作。

0