上文讲到了树的基本知识(http://t.csdn.cn/x0zYB),本文接着讲讲二叉树的概念以及代码实现
二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次。
1,前序遍历
先输出当前结点的数据,再依次遍历输出左结点和右结点
2.中序遍历
先遍历输出左结点,再输出当前结点的数据,再遍历输出右结点
3.后序遍历
先遍历输出左结点,再遍历输出右结点,最后输出当前结点的数据
4,层序遍历
从树的第一层开始,从上到下逐层遍历,在同一层中,从左到右对结点 逐个访问输出
四种遍历方式的代码实现:
namespace _二叉树遍历
{
//若节点为空时,将其数组位置设置为-1
internal class BiTree<T>
{
private T[] data;
private int count = 0;
public BiTree(int volume)//二叉树容量
{
data = new T[volume];
}
public bool Add(T item)
{
if (count < data.Length)
{
data[count] = item;
count++;
return true;
}
else
{
Console.WriteLine("存不下了");
return false;
}
}
public void preorderTraversal()
{
preorderTraversal(0);
}
private void preorderTraversal(int index)
{
if (index >= count) return;
int number = index + 1;//当前节点编号
//if (data[index] == -1) return;
if (data[index].Equals(-1)) return;
Console.Write(data[index]+" ");
int leftNumber = number * 2;//左子节点编号
int rightNumber = number * 2 + 1;//右子节点编号
preorderTraversal(leftNumber - 1);
preorderTraversal(rightNumber - 1);
}
public void inorderTraversal()
{
inorderTraversal(0);
}
private void inorderTraversal(int index)
{
if (index >= count) return;
int number = index + 1;
if (data[index].Equals(-1)) return;
int leftNumber = number * 2;//左子节点编号
int rightNumber = number * 2 + 1;//右子节点编号
inorderTraversal(leftNumber - 1);
Console.Write(data[index] + " ");
inorderTraversal(rightNumber - 1);
}
public void postorderTraversal()
{
postorderTraversal(0);
}
private void postorderTraversal(int index)
{
if (index >= count) return;
int number = index + 1;
if (data[index].Equals(-1)) return;
int leftNumber = number * 2;//左子节点编号
int rightNumber = number * 2 + 1;//右子节点编号
postorderTraversal(leftNumber - 1);
postorderTraversal(rightNumber - 1);
Console.Write(data[index] + " ");
}
public void levelTraversal()
{
for(int i=0;i<count;i++)
{
Console.Write(data[i]+" ");
}
}
}
}
internal class Program
{
static void Main(string[] args)
{
char[] data = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K'};
BiTree<char> tree = new BiTree<char>(11);
for (int i = 0; i < data.Length; i++)
{
tree.Add(data[i]);
}
tree.preorderTraversal();
Console.WriteLine();
tree.inorderTraversal();
Console.WriteLine();
tree.postorderTraversal();
Console.WriteLine();
tree.levelTraversal();
}
}