您的位置:首页 > 其它

.Net 中泛型二叉树的实现和中序遍历

2009-12-02 13:39 369 查看
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;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐