因为不太难,所以直接贴代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BiTree
{
public class TreeNode
{
public object Data{get;set;}
public TreeNode left{get;set;}
public TreeNode right{get;set;}
}
public class Test
{
/// <summary>
/// 建立二叉树
/// </summary>
/// <param name="node"></param>
public static void CreateTree(TreeNode node)
{
node.Data = Console.ReadLine();
if(node.Data==null||String.IsNullOrEmpty(node.Data.ToString()))
return;
node.left=new TreeNode();
CreateTree(node.left);
if(node.left.Data==null)
node.left=null;
node.right=new TreeNode();
CreateTree(node.right);
if(node.right.Data==null)
node.right=null;
}
/// <summary>
/// 先序遍历
/// </summary>
/// <param name="node"></param>
public static void preOrder(TreeNode node)
{
if (node == null)
return;
Console.WriteLine(node.Data);
preOrder(node.left);
preOrder(node.right);
}
/// <summary>
/// 中序遍历
/// </summary>
/// <param name="node"></param>
public static void thrOrder(TreeNode node)
{
if (node == null)
return;
preOrder(node.left);
Console.WriteLine(node.Data);
preOrder(node.right);
}
/// <summary>
/// 后序遍历
/// </summary>
/// <param name="node"></param>
public static void postOrder(TreeNode node)
{
if (node == null)
return;
preOrder(node.left);
preOrder(node.right);
Console.WriteLine(node.Data);
}
/// <summary>
/// 层序遍历
/// </summary>
/// <param name="node"></param>
public static void levelOder(TreeNode tree)
{
Queue<object> queue = new Queue<object>();
queue.Enqueue(tree);
while (queue.Count > 0)
{
TreeNode node = queue.Dequeue() as TreeNode;
Console.WriteLine(node.Data);
if (node.left != null)
queue.Enqueue(node.left);
if (node.right != null)
queue.Enqueue(node.right);
}
}
}
class program
{
static void Main(string[] args)
{
TreeNode node = new TreeNode();
Test.CreateTree (node);
Console.WriteLine("先序");
Test.preOrder (node);
Console.WriteLine("中序");
Test.thrOrder(node);
Console.WriteLine("后序");
Test.postOrder(node);
Console.WriteLine("层序");
Test.levelOder(node);
Console.ReadLine();
}
}