二叉树的实现
二叉树的结点包含data,left,right,通过一些结点之间的关系就可以构造二叉树;
二叉树结点类
class Node<T>
{
T data;
Node<T> left;
Node<T> right;
public Node(T value)
{
data = value;
left = null;
right = null;
}
public Node()
{
data = default(T);
left = null;
right = null;
}
public Node(T value,Node<T> lChild,Node<T> rChild)
{
data = value;
left = lChild;
right = rChild;
}
public T Data
{
get { return data; }
set { data = value; }
}
public Node<T> Left
{
get { return left; }
set { left = value; }
}
public Node<T> Right
{
get { return right; }
set { right = value; }
}
}
二叉树类
class LinkBinaryTree<T>
{
private Node<T> root;//根结点
public Node<T> Root
{
get { return root; }
}
public LinkBinaryTree()
{
root = null;
}
public LinkBinaryTree(T value)
{
Node<T> p = new Node<T>(value);
root = p;
}
//三种深度遍历
//中序遍历
public void InOrder(Node<T> node)
{
if (root == null)
return;
if(node!=null)
{
InOrder(node.Left);
Console.Write(node.Data);
InOrder(node.Right);
}
}
//先序遍历
public void PreOrder(Node<T> node)
{
if (root == null)
return;
if (node != null)
{
Console.Write(node.Data);
PreOrder(node.Left);
PreOrder(node.Right);
}
}
//后序遍历
public void PostOrder(Node<T> node)
{
if (root == null)
return;
if (node != null)
{
PostOrder(node.Left);
PostOrder(node.Right);
Console.Write(node.Data);
}
}
//-------广度遍历----------使用队列
public void BFS(Node<T> root)
{
if (root == null)
return;
Queue<Node<T>> queue = new Queue<Node<T>>();
queue.Enqueue(root);
while (queue.Count>0)
{
Node<T> node = queue.Dequeue();
Console.WriteLine(node.Data);
if (node.Left != null)
queue.Enqueue(node.Left);
if (node.Right != null)
queue.Enqueue(node.Right);
}
}
}