在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
方法是否按预期工作。