.Net 中泛型二叉树的实现和中序遍历
来源:互联网 发布:美工基本知识 编辑:程序博客网 时间:2024/06/06 01:31
using System;
using System.Collections.Generic;
using System.Text;
namespace BinaryTree
{
public class Tree<T> where T : IComparable<T>
{
#region 字段
private T data;
private Tree<T> left;
private Tree<T> right;
#endregion
#region 属性
/// <summary>
/// 节点数据
/// </summary>
public T NodeData
{
get { return this.data; }
set { this.data = value; }
}
/// <summary>
/// 左子树
/// </summary>
public Tree<T> LeftTree
{
get { return this.left; }
set { this.left = value; }
}
/// <summary>
/// 右子树
/// </summary>
public Tree<T> RightTree
{
get { return right; }
set { right = value; }
}
#endregion
#region 方法
/// <summary>
/// 自定义构造函数
/// </summary>
/// <param name="nodeValue"></param>
public Tree(T nodeValue)
{
this.data = nodeValue;
this.left = null;
this.right = null;
}
/// <summary>
/// 将新项插入二叉树中
/// </summary>
/// <param name="newItem">新项</param>
public void Insert(T newItem)
{
T currentNodeValue = this.NodeData;
if (currentNodeValue.CompareTo(newItem) > 0)
{
// 在左子树中插入新项
if (this.LeftTree == null)
{
// 使用新项创建新的左子树
this.LeftTree = new Tree<T>(newItem);
}
else
{
// 递归调用Insert方法,将新项插入现有左子树中
this.LeftTree.Insert(newItem);
}
}
else
{
// 在右子树中插入新项
if (this.RightTree == null)
{
// 使用新项创建新的右子树
this.RightTree = new Tree<T>(newItem);
}
else
{
// 递归调用Insert方法,将新项插入现有右子树中
this.RightTree.Insert(newItem);
}
}
}
/// <summary>
/// 中序遍历二叉树
/// </summary>
public void WalkTree()
{
if (this.LeftTree != null)
{
// 遍历左子树
this.LeftTree.WalkTree();
}
Console.WriteLine(this.NodeData.ToString());
if (this.RightTree != null)
{
// 遍历右子树
this.RightTree.WalkTree();
}
}
#endregion
}
}
测试:
using System;
using System.Collections.Generic;
using System.Text;
using BinaryTree;
namespace BinaryTreeTest
{
class Program
{
static void Main(string[] args)
{
Tree<int> tree1 = new Tree<int>(10);
tree1.Insert(5);
tree1.Insert(11);
tree1.Insert(5);
tree1.Insert(-12);
tree1.Insert(15);
tree1.Insert(0);
tree1.Insert(14);
tree1.Insert(-8);
tree1.Insert(10);
tree1.Insert(8);
tree1.Insert(8);
tree1.WalkTree();
Tree<string> tree2 = new Tree<string>("Hello");
tree2.Insert("World");
tree2.Insert("How");
tree2.Insert("Are");
tree2.Insert("You");
tree2.Insert("Today");
tree2.Insert("I");
tree2.Insert("You");
tree2.Insert("Are");
tree2.Insert("Feeling");
tree2.Insert("Well");
tree2.WalkTree();
string[] test = new string[3];
test[0] = "hello";
test[1] = "world";
test[2] = "haha";
Tree<string> temp = BuildTree<string>(test);
temp.WalkTree();
Tree<string> array = BuildTree<string>("hello", "world", "haha");
array.WalkTree();
}
public static Tree<T> BuildTree<T>(params T[] data) where T : IComparable<T>
{
Tree<T> sortTree = new Tree<T>(data[0]);
for (int i = 1; i < data.Length; i++)
{
sortTree.Insert(data[i]);
}
return sortTree;
}
}
}
- .Net 中泛型二叉树的实现和中序遍历
- 数组实现根据二叉树的先序遍历和中序遍历构造二叉树
- 编程实现二叉树的建立,前序遍历,中序遍历和后续遍历
- 二叉树的中序遍历实现
- 二叉树的遍历--用递归 和栈 实现 前序、中序、后序遍历
- 根据前序遍历和中序遍历重建二叉树的Java实现
- java实现二叉树的中序遍历和后续遍历
- 建立二叉树,实现二叉树的先序遍历、中序和后序遍历的非递归算法
- 一直二叉树的前序遍历和中序遍历的结果,重建该二叉树 Java代码实现
- 代码实现 由二叉树的先序遍历和中序遍历推出后序遍历
- 二叉树的先序遍历、中序遍历、后续遍历和二叉树还原
- 已知二叉树的前序遍历和中序遍历求后序遍历(二叉树)
- 已知二叉树的后序遍历和中序遍历求前序遍历(二叉树)
- 二叉树系列:已知二叉树的中序遍历和前序遍历,求后序遍历
- 3.14(c程序实现)已知二叉树的前序遍历和中序遍历,求后序遍历
- 已知二叉树的前序遍历和中序遍历重建二叉树(二叉树)
- 已知二叉树的后序遍历和中序遍历重建二叉树(二叉树)
- 【二叉树】根据二叉树的中序遍历和前序遍历,还原二叉树
- 09亚联入围选手名单
- 基于XP打造windows7的C++开发平台--vs2010+windows SDK for windows7
- 迷茫的大学生活
- 准备工作多么的重要
- find 命令
- .Net 中泛型二叉树的实现和中序遍历
- JQuery用法与特性
- 在Fedora 10中以命令行方式启动
- (转)音频视频编程相关:GStreamer/ffmpeg/directshow/vfw
- Linux开发工具的使用
- 数字函数
- java webservice 客户端生成
- Arm 体系结构以、变体和处理器系列
- 回答带箭头移动绘制矩形,小议AS3.0面向对像