C#二叉树递归实现
二叉树类(binaryTree.cs)
using System;
namespace binary_tree_demo
{
class BinaryTreeNode where T : IComparable
{
public BinaryTreeNode()
{
left = null;
right = null;
}
public BinaryTreeNode(BinaryTreeNode l, BinaryTreeNode r)
{
left = l;
right = r;
}
public BinaryTreeNode(T v, BinaryTreeNode l, BinaryTreeNode r)
{
left = l;
right = r;
value = v;
}
public BinaryTreeNode(T t)
{
value = t;
}
public BinaryTreeNode left;
public BinaryTreeNode right;
public T value;
public void insert(T t)
{
T currentNodeValue = this.value;
if (currentNodeValue.CompareTo(t) > 0)
{
if (this.left == null)
{
this.left = new BinaryTreeNode(t);
}
else
{
this.left.insert(t);
}
}
else
{
if (this.right == null)
{
this.right = new BinaryTreeNode(t);
}
else
{
this.right.insert(t);
}
}
}
}
}
实例程序(program.cs)
using System;
namespace binary_tree_demo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Here's a binarytree");
BinaryTreeNode root = new BinaryTreeNode(1,
new BinaryTreeNode(2,
new BinaryTreeNode(4), new BinaryTreeNode(5)),
new BinaryTreeNode(3));
Console.Write("preorderTraversal:\t");
preorderTraversal(root);
Console.WriteLine();
Console.Write("inorderTraversal:\t");
inorderTraversal(root);
Console.WriteLine();
Console.Write("postorderTraversal:\t");
postorderTraversal(root);
Console.WriteLine();
Console.WriteLine("here's another binarytree.");
BinaryTreeNode root1 = new BinaryTreeNode(1);
for (int i = 2; i <= 5; i++)
root1.insert(i);
Console.Write("preorderTraversal:\t");
preorderTraversal(root1);
Console.WriteLine();
Console.Write("inorderTraversal:\t");
inorderTraversal(root1);
Console.WriteLine();
Console.Write("postorderTraversal:\t");
postorderTraversal(root1);
Console.WriteLine();
Console.ReadKey();
}
///
/// 前序遍历
///
public static void preorderTraversal(BinaryTreeNode root)
{
if (root != null)
{
Console.Write(root.value);
preorderTraversal(root.left);
preorderTraversal(root.right);
}
}
///
/// 中序遍历
///
public static void inorderTraversal(BinaryTreeNode root)
{
if (root != null)
{
inorderTraversal(root.left);
Console.Write(root.value);
inorderTraversal(root.right);
}
}
///
/// 后序遍历
///
public static void postorderTraversal(BinaryTreeNode root)
{
if (root != null)
{
postorderTraversal(root.left);
postorderTraversal(root.right);
Console.Write(root.value);
}
}
}
}