学习后完成的,主要是学习了别人的思想和方法,但在输入结点方面加了些自己的优化。以后还会继续学习继续添加,不过都很基础,基础,基础。。。。不是为了解决问题也不是用来沟通交流的,算是一种督促自己学习的方式吧~
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BinaryTree
{
class Program
{
static void Main(string[] args)
{
//Create a Binary Tree
Console.WriteLine("Please give a number how many nodes you want to create for the Binary_Tree: ");
int length = int.Parse(Console.ReadLine());
if (length == 0)
{ return; }
Console.WriteLine("Please input the data: ");
//array for the Node class
Node<int>[] binTree = new Node<int>[length];
for (int i = 0; i < length; i++)
{
binTree[i] = new Node<int>(int.Parse(Console.ReadLine()));
}
if (length == 1)
{
Binary_Tree<int> Tree = new Binary_Tree<int>(binTree[0]);
Console.WriteLine("The PreOrder is:");
Tree.PreOrder(binTree[0]);
Console.WriteLine();
Tree.InOrder(binTree[0]);
Console.WriteLine();
Tree.PostOrder(binTree[0]);
Console.WriteLine();
}
else
{
int j;
for (j = 0; j < (length - 2) / 2; j++)
{
binTree[j].Lchild = binTree[2 * j + 1];
binTree[j].Rchild = binTree[2 * j + 2];
}
if (j == (length - 2) / 2 && length % 2 != 0)
{
binTree[j].Lchild = binTree[2 * j + 1];
binTree[j].Rchild = binTree[2 * j + 2];
}
if (j == (length - 2) / 2 && length % 2 == 0)
{
binTree[j].Lchild = binTree[2 * j + 1];
}
//instantiation
Binary_Tree<int> Tree = new Binary_Tree<int>(binTree[0]);
//methods calling
Console.WriteLine("The PreOrder is:");
Tree.PreOrder(binTree[0]);
Console.WriteLine();
Console.WriteLine("The InOrder is:");
Tree.InOrder(binTree[0]);
Console.WriteLine();
Console.WriteLine("The PostOrder is:");
Tree.PostOrder(binTree[0]);
Console.WriteLine();
}
}
}
}
public class Node<T>
{
//field
private T root;
private Node<T> lchild;
private Node<T> rchild;
//property for the fields
public T Root
{
get
{
return root;
}
set
{
root = value;
}
}
public Node<T> Lchild
{
get
{
return lchild;
}
set
{
lchild = value;
}
}
public Node<T> Rchild
{
get
{
return rchild;
}
set
{
rchild = value;
}
}
//constructor for the class
public Node(T val)
{
root = val;
lchild = null;
rchild = null;
}
}
public class Binary_Tree<T>
{
//field
private Node<T> head;
//property
public Node<T> Head
{
get
{
return head;
}
set
{
head = value;
}
}
//constructor for the class
public Binary_Tree(Node<T> P)
{
head = P;
}
//methods for traverses
public void PreOrder(Node<T> P)
{
if (P != null)
{
Console.Write(P.Root+" ");
PreOrder(P.Lchild);
PreOrder(P.Rchild);
}
else
{
return;
}
}
public void InOrder(Node<T> P)
{
if (P != null)
{
InOrder(P.Lchild);
Console.Write(P.Root + " ");
InOrder(P.Rchild);
}
else
{
return;
}
}
public void PostOrder(Node<T> P)
{
if (P != null)
{
PostOrder(P.Lchild);
PostOrder(P.Rchild);
Console.Write(P.Root + " ");
}
else
{
return;
}
}
}
2009-12-28