C#实现二叉树数据结构以及先序、中序、后续遍历
2009-05-19 08:43
871 查看
/// <summary>
/// 二叉树节点类
/// </summary>
public class BinNode
{
//二叉树的值
private int value;
//二叉树的左子节点
private BinNode left;
//二叉树的右子节点
private BinNode right;
//构造
public BinNode(int value, BinNode left, BinNode right)
{
//base();
this.value = value;
this.left = left;
this.right = right;
}
/// <summary>
/// 取得左子节点
/// </summary>
/// <returns></returns>
public BinNode GetLeft()
{
return left;
}
/// <summary>
/// 取得右子节点
/// </summary>
/// <returns></returns>
public BinNode GetRight()
{
return right;
}
/// <summary>
/// 在控制台输出节点值
/// </summary>
public void PrintValue()
{
Console.WriteLine(value);
}
}
========================================================================
/// <summary>
/// 二叉树类
/// </summary>
public class BinTree
{
private BinNode root;
/// <summary>
/// 取得根节点
/// </summary>
/// <returns></returns>
public BinNode GetRoot()
{
return root;
}
/// <summary>
/// 构造
/// </summary>
/// <param name="root"></param>
public BinTree(BinNode root)
{
this.root = root;
}
/// <summary>
/// 先序遍历
/// </summary>
/// <param name="node"></param>
public void BeforeList(BinNode node)
{
if (node != null)
{
node.PrintValue();//先访问根
BeforeList(node.GetLeft());//然后递归访问左子节点
BeforeList(node.GetRight());//最后递归访问右子节点
}
}
/// <summary>
/// 中序遍历
/// </summary>
/// <param name="node"></param>
public void MiddleList(BinNode node)
{
if (node != null)
{
MiddleList(node.GetLeft());//先递归访问左子节点
node.PrintValue();//然后访问根
MiddleList(node.GetRight());//最后递归访问右子节点
}
}
/// <summary>
/// 后续遍历
/// </summary>
/// <param name="node"></param>
public void AfterList(BinNode node)
{
if (node != null)
{
AfterList(node.GetLeft());//先递归访问左子节点
AfterList(node.GetRight());//然后递归访问右子节点
node.PrintValue();//最后访问根
}
}
}
===========================================================
static void Main(string[] args)
{
//创建二叉树节点
BinNode nine = new BinNode(9,null,null);
BinNode eight = new BinNode(8,null,null);
BinNode seven = new BinNode(7,eight,nine);
BinNode three = new BinNode(3,seven,null);
BinNode five = new BinNode(5,null,null);
BinNode six = new BinNode(6,null,null);
BinNode two = new BinNode(2,five,six);
BinNode one = new BinNode(1,two,three);
//实例化二叉树
BinTree tree = new BinTree(one);
//先序遍历
Console.WriteLine("先序遍历");
tree.BeforeList(tree.GetRoot());
//中序遍历
Console.WriteLine("中序遍历");
tree.MiddleList(tree.GetRoot());
//后序遍历
Console.WriteLine("后序遍历");
tree.AfterList(tree.GetRoot());
}
/// 二叉树节点类
/// </summary>
public class BinNode
{
//二叉树的值
private int value;
//二叉树的左子节点
private BinNode left;
//二叉树的右子节点
private BinNode right;
//构造
public BinNode(int value, BinNode left, BinNode right)
{
//base();
this.value = value;
this.left = left;
this.right = right;
}
/// <summary>
/// 取得左子节点
/// </summary>
/// <returns></returns>
public BinNode GetLeft()
{
return left;
}
/// <summary>
/// 取得右子节点
/// </summary>
/// <returns></returns>
public BinNode GetRight()
{
return right;
}
/// <summary>
/// 在控制台输出节点值
/// </summary>
public void PrintValue()
{
Console.WriteLine(value);
}
}
========================================================================
/// <summary>
/// 二叉树类
/// </summary>
public class BinTree
{
private BinNode root;
/// <summary>
/// 取得根节点
/// </summary>
/// <returns></returns>
public BinNode GetRoot()
{
return root;
}
/// <summary>
/// 构造
/// </summary>
/// <param name="root"></param>
public BinTree(BinNode root)
{
this.root = root;
}
/// <summary>
/// 先序遍历
/// </summary>
/// <param name="node"></param>
public void BeforeList(BinNode node)
{
if (node != null)
{
node.PrintValue();//先访问根
BeforeList(node.GetLeft());//然后递归访问左子节点
BeforeList(node.GetRight());//最后递归访问右子节点
}
}
/// <summary>
/// 中序遍历
/// </summary>
/// <param name="node"></param>
public void MiddleList(BinNode node)
{
if (node != null)
{
MiddleList(node.GetLeft());//先递归访问左子节点
node.PrintValue();//然后访问根
MiddleList(node.GetRight());//最后递归访问右子节点
}
}
/// <summary>
/// 后续遍历
/// </summary>
/// <param name="node"></param>
public void AfterList(BinNode node)
{
if (node != null)
{
AfterList(node.GetLeft());//先递归访问左子节点
AfterList(node.GetRight());//然后递归访问右子节点
node.PrintValue();//最后访问根
}
}
}
===========================================================
static void Main(string[] args)
{
//创建二叉树节点
BinNode nine = new BinNode(9,null,null);
BinNode eight = new BinNode(8,null,null);
BinNode seven = new BinNode(7,eight,nine);
BinNode three = new BinNode(3,seven,null);
BinNode five = new BinNode(5,null,null);
BinNode six = new BinNode(6,null,null);
BinNode two = new BinNode(2,five,six);
BinNode one = new BinNode(1,two,three);
//实例化二叉树
BinTree tree = new BinTree(one);
//先序遍历
Console.WriteLine("先序遍历");
tree.BeforeList(tree.GetRoot());
//中序遍历
Console.WriteLine("中序遍历");
tree.MiddleList(tree.GetRoot());
//后序遍历
Console.WriteLine("后序遍历");
tree.AfterList(tree.GetRoot());
}
相关文章推荐
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树先序、中序、后续遍历递归以及非递归java实现
- 数据结构 分别用递归和非递归方法实现二叉树先序,中序,后序遍历
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(C#)--二叉查找树的先序,中序,后序的遍历问题以及最大值,最小值,插入,删除
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 【数据结构与算法】(六) c 语言实现简单的二叉树静态创建及先序、中序、后序遍历
- 数据结构——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构之二叉树 (构造 拷贝构造 以及前序中序后续三种遍历方法)
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构 — 实现二叉树的前序,中序,后序遍历(非递归)
- 数据结构(一)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树的实现&&递归和非递归方式前序、中序、后续遍历&&发现一个节点中序遍历的下一节点
- 递归和非递归俩种方法实现二叉树的前序、中序、后续遍历
- 二叉树的前序,中序,后续,递归及非递归遍历的python实现
- 二叉树后续遍历的非递归循环C# 实现