📜  C# 下树并返回 - C# (1)

📅  最后修改于: 2023-12-03 14:59:41.300000             🧑  作者: Mango

C# 下树并返回 - C#

简介

本文将介绍在 C# 中如何以树形结构存储数据,并实现遍历和返回功能。

实现过程

本文以单向树作为示例,以下是该树的结构:

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

每个节点包含一个整数值和一个子节点列表。

添加节点

向树中添加节点的方法如下:

public void AddNode(TreeNode parent, TreeNode child)
{
    parent.Children.Add(child);
}
遍历树

遍历树的方法有两种:深度优先遍历和广度优先遍历。

深度优先遍历

深度优先遍历通常使用递归算法实现。以下是以前序遍历方式遍历树的代码:

public void TraversePreOrder(TreeNode node)
{
    if(node == null)
    {
        return;
    }
    
    Console.WriteLine(node.Value);
    
    foreach(var child in node.Children)
    {
        TraversePreOrder(child);
    }
}

广度优先遍历

广度优先遍历使用队列数据结构实现。以下是以层序遍历方式遍历树的代码:

public void TraverseLevelOrder(TreeNode node)
{
    Queue<TreeNode> q = new Queue<TreeNode>();
    q.Enqueue(node);
    
    while(q.Count > 0)
    {
        TreeNode current = q.Dequeue();
        Console.WriteLine(current.Value);
        
        foreach(var child in current.Children)
        {
            q.Enqueue(child);
        }
    }
}
返回子树

在树中找到一个节点后,需要返回其子树。以下是返回子树的代码:

public TreeNode GetSubTree(TreeNode node)
{
    var subTree = new TreeNode()
    {
        Value = node.Value,
        Children = new List<TreeNode>(),
    };
    
    foreach(var child in node.Children)
    {
        subTree.Children.Add(GetSubTree(child));
    }
    
    return subTree;
}
总结

本文介绍了在 C# 中如何以树形结构存储数据,并实现遍历和返回子树的功能。希望能对你的编程工作有所帮助。