1.概念
普通树的遍历分为深度优先遍历和广度优先遍历,深度优先遍历是从跟结点开始,先访问结点的孩子结点,再访问结点的兄弟结点,分为先序遍历和后序遍历,广度优先遍历是先访问结点的兄弟结点,再访问结点的孩子结点,需要借助于队列。
2.实现代码
public class Tree
{
/// <summary>
/// 深度优先
/// </summary>
/// <param name="node"></param>
public void DFS(Node node)
{
if (node != null)
{
Console.Write(node.value + " ");
DFS(node.firstChild);
DFS(node.nextSibling);
}
}
/// <summary>
/// 广度优先搜索遍历
/// </summary>
/// <param name="node"></param>
public void BFS(Node node)
{
if (node != null)
{
Queue<Node> queue = new Queue<Node>();
queue.Enqueue(node);
while (queue.Count > 0)
{
Node n = queue.Dequeue();
Node firstChild = n.firstChild;
Console.Write(n.value + " ");
if (firstChild != null)
{
queue.Enqueue(firstChild);
while (firstChild.nextSibling != null)
{
queue.Enqueue(firstChild.nextSibling);
firstChild = firstChild.nextSibling;
}
}
}
}
}
}
public class Node
{
/// <summary>
/// 结点信息
/// </summary>
public int value { get; set; }
/// <summary>
/// 第一个孩子,最左孩子结点
/// </summary>
public Node firstChild { get; set; }
/// <summary>
/// 相邻的下一个兄弟结点
/// </summary>
public Node nextSibling { get; set; }
}