#region 二叉树算法
//using System;
public class Node
{
//成员变量
private object _data; //数据
private Node _left; //左孩子
private Node _right; //右孩子
/// <summary>
/// 数组对像
/// </summary>
public object Data
{
get { return _data; }
}
/// <summary>
/// 左孩子
/// </summary>
public Node Left
{
get { return _left; }
set { _left = value; }
}
/// <summary>
/// 右孩子
/// </summary>
public Node Right
{
get { return _right; }
set { _right = value; }
}
/// <summary>
/// 构造方法
/// </summary>
/// <param name="data"></param>
public Node(object data)
{
_data = data;
}
/// <summary>
/// 重写ToString方法
/// </summary>
/// <returns></returns>
public override string ToString()
{
return _data.ToString();
}
}
//using System;
public class BinaryTree
{ //成员变量
private Node _head; //头指针
private string cStr; //用于构造二叉树的字符串
public Node Head //头指针
{
get { return _head; }
}
//构造方法
public BinaryTree(string constructStr)
{
cStr = constructStr;
_head = new Node(cStr[0]); //添加头结点
Add(_head, 0); //给头结点添加孩子结点
}
/// <summary>
/// 添加一个节点
/// </summary>
/// <param name="parent"></param>
/// <param name="index"></param>
private void Add(Node parent, int index)
{
int leftIndex = 2 * index + 1; //计算左孩子索引
if (leftIndex < cStr.Length) //如果索引没超过字符串长度
{
if (cStr[leftIndex] != '#') //'#'表示空结点
{ //添加左孩子
parent.Left = new Node(cStr[leftIndex]);
//递归调用Add方法给左孩子添加孩子节点
Add(parent.Left, leftIndex);
}
}
int rightIndex = 2 * index + 2;
if (rightIndex < cStr.Length)
{
if (cStr[rightIndex] != '#')
{ //添加右孩子
parent.Right = new Node(cStr[rightIndex]);
//递归调用Add方法给右孩子添加孩子节点
Add(parent.Right, rightIndex);
}
}
}
public void PreOrder(Node node) //先序遍历
{
if (node != null)
{
Console.Write(node.ToString()); //打印字符
PreOrder(node.Left); //递归
PreOrder(node.Right); //递归
}
}
public void MidOrder(Node node) //中序遍历
{
if (node != null)
{
MidOrder(node.Left); //递归
Console.Write(node.ToString()); //打印字符
MidOrder(node.Right); //递归
}
}
public void AfterOrder(Node node) //后继遍历
{
if (node != null)
{
AfterOrder(node.Left); //递归
AfterOrder(node.Right); //递归
Console.Write(node.ToString()); //打印字符
}
}
}
#endregion
二叉树算法
最新推荐文章于 2023-04-17 12:14:52 发布