
图一:完全二叉树以及对应的数组

图二:满二叉树以及对应的数组

图三:普通二叉树以及对应的数组 (字符'^'代表空节点)

四:我们以这三个二叉树为例,使用C#实现四种遍历
(1)构造一个二叉树顺序结构类
/****************************************************
文件:BiTree.cs
作者:黄山学院--Li Qingshan
邮箱: 2781838262@qq.com
日期:2020/05/19 12:24
功能:
*****************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 二叉树_顺序存储
{
public class BiTree<T>
{
public T[] data;
private int nextIndex = 0;
public BiTree(int length)
{
data = new T[length];
}
public bool Add(T item)
{
if (nextIndex >= data.Length)
{
return false;
}
else
{
data[nextIndex] = item;
nextIndex++;
return true;
}
}
//前序遍历
public void PreorderTraversal(int number)
{
//当下标越界或者当前元素为'^'时此次递归分支终止
if (number > data.Length || data[number - 1].Equals('^'))
{
return;
}
Console.Write(data[number - 1] + " ");
int leftChildNum = number * 2;
PreorderTraversal(leftChildNum);
int rightChildNum = number * 2 + 1;
PreorderTraversal(rightChildNum);
}
//中序遍历
public void MiddleTraversal(int number)
{
//当下标越界或者当前元素为'^'时此次递归分支终止
if (number > data.Length || data[number - 1].Equals('^'))
{
return;
}
int leftChildNum = number * 2;
MiddleTraversal(leftChildNum);
Console.Write(data[number - 1] + " ");
int rightChildNum = number * 2 + 1;
MiddleTraversal(rightChildNum);
}
//后序遍历
public void PostorderTraversal(int number)
{
//当下标越界或者当前元素为'^'时此次递归分支终止
if (number > data.Length || data[number - 1].Equals('^'))
{
return;
}
int leftChildNum = number * 2;
PostorderTraversal(leftChildNum);
int rightChildNum = number * 2 + 1;
PostorderTraversal(rightChildNum);
Console.Write(data[number - 1] + " ");
}
//层序遍历
public void LayerTraversal()
{
for (int i = 0; i < data.Length; i++)
{
//当前元素为'^'时 跳过 执行下一循环
if (data[i].Equals('^'))
{
continue;
}
Console.Write(data[i] + " ");
}
}
}
}
(1)在main方法中定义三上述三树,并调用遍历方法
/****************************************************
文件:Program.cs
作者:黄山学院--Li Qingshan
邮箱: 2781838262@qq.com
日期:2020/05/19 15:49
功能:
*****************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 二叉树_顺序存储
{
class Program
{
static void Main(string[] args)
{
//完全二叉树
//char[] CompleteBinaryTree = new[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' };
//满二叉树
//char[] FullBinaryTree = new[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G'};
//普通二叉树
char[] NormalBinaryTree = new[] { 'A', 'B', 'C', 'D', '^', 'F', 'G', '^', 'H', '^', '^', 'I' };
BiTree<char> biTree = new BiTree<char>(NormalBinaryTree.Length);
for (int i = 0; i < NormalBinaryTree.Length; i++)
{
biTree.data[i] = NormalBinaryTree[i];
}
Console.Write("前序遍历: ");
biTree.PreorderTraversal(1);//前序
Console.WriteLine();
Console.Write("中序遍历: ");
biTree.MiddleTraversal(1);//中序
Console.WriteLine();
Console.Write("后序遍历: ");
biTree.PostorderTraversal(1);//后序
Console.WriteLine();
Console.Write("层序遍历: ");
biTree.LayerTraversal();//层序
Console.ReadKey();
}
}
}
(3)以图三二叉树为例,输出结果为:
