二叉树 广度遍历
广度遍历如图

先从1层开始遍历 然后 2 层 , 3层,,,,,,,,,
只需改变一下BinaryTree类
class BinaryTree { private BinaryTreeNode _head;//头指针 private string cStr;//用于构造二叉树的字符串 public BinaryTreeNode Head//头指针 { get {return _head ;} } public BinaryTree(string str) { cStr = str; _head = new BinaryTreeNode(cStr[0]);//添加头结点 ADD(_head,0);//增加孩子结点 } private void ADD(BinaryTreeNode parent,int index) {//index 双亲结点的下标 int leftIndex = 2 * index + 1;//左孩子的下标 if (leftIndex<cStr.Length)//存在左孩子 { if (cStr[leftIndex] != '#')//左孩子不是空结点 {//添加左孩子 parent.Left = new BinaryTreeNode(cStr[leftIndex]); //递归方法添加左孩子的左孩子和右孩子 ADD(parent.Left,leftIndex); } } int rightIndex = 2 * index + 2;//右孩子的下标 if (rightIndex<cStr.Length) { if (cStr[rightIndex]!='#') { parent.Right = new BinaryTreeNode(cStr[rightIndex]); ADD(parent.Right, rightIndex); } } } public void PreOrder(BinaryTreeNode node)//先序遍历 { if (node!=null)//此二叉树不为空树 { Console.Write(node); PreOrder(node.Left); PreOrder(node.Right); } } public void MidOrder(BinaryTreeNode node) //中序遍历 { if (node!=null) { MidOrder(node.Left); Console.Write(node); MidOrder(node.Right); } } public void AfterOrder(BinaryTreeNode node) //后序遍历 { if (node != null) { AfterOrder(node.Left); AfterOrder(node.Right); Console.Write(node); } } //广度优先遍历 public void LevelOrder() { Queue queue = new Queue(); queue.Enqueue(_head); while (queue.Count>0)//队列不为空 { BinaryTreeNode node = (BinaryTreeNode)queue.Dequeue();//出队 Console.Write(node); if (node.Left!=null)//结点左孩子不为空 {//左孩子入队 queue.Enqueue(node.Left); } if (node.Right != null)//结点右孩子不为空 {//右孩子入队 queue.Enqueue(node.Right); } } } }
调用
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication13 { class Program { static void Main(string[] args) { BinaryTree tree = new BinaryTree("ABCDE#F"); //Console.WriteLine("ABCDE#F 先序遍历的结果为:"); //tree.PreOrder(tree.Head);//先序遍历输出 //Console.WriteLine(""); //Console.WriteLine("ABCDE#F 中序遍历的结果为:"); //tree.MidOrder(tree.Head); //Console.WriteLine(""); //Console.WriteLine("ABCDE#F 后序遍历的结果为:"); //tree.AfterOrder(tree.Head); //Console.WriteLine(""); Console.WriteLine("ABCDE#F 广度遍历的结果为:"); tree.LevelOrder(); Console.WriteLine(""); Console.ReadLine(); } } }

浙公网安备 33010602011771号