一构造二叉树 读取二叉树的值
新建工程类库:命名BinaryTree
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace BinaryTree { //where表示TItem类型实现接口IComparable public class Tree<TItem> where TItem:IComparable<TItem> { //属性 public TItem DataNode { get; set; } public Tree<TItem> LeftNode { get; set; } public Tree<TItem> RightNode { get; set; } //构造函数 public Tree(TItem nodevalue) { this.DataNode = nodevalue;//作为树根节点的值 this.LeftNode = null; this.RightNode = null; } //向树中插入节点 public void Insert(TItem newitem) { //把独立树的节点值赋值给当前节点 TItem currentNodeValue = this.DataNode; //currentNodeValue与newitem比较 大于0插入左边树,小于0插入右边树 if (currentNodeValue.CompareTo(newitem) > 0) { //左节点是否为空 if (this.LeftNode == null) { //创建左节点 this.LeftNode = new Tree<TItem>(newitem); } else { //把当前左节点看作为独立树的根节点继续递归向下查找,直到没有左节点然后插入 this.LeftNode.Insert(newitem); } } else { //右节点是否为空 if (this.RightNode == null) { //创建右节点 this.RightNode = new Tree<TItem>(newitem); } else { //把当前右节点看作独立树的根节点继续递归向下查找,直到没有右节点然后插入 this.RightNode.Insert(newitem); } } } //读取树中的数据 public void WalkTree() { //是否存在左节点 if (this.LeftNode != null) { //递归继续读取 this.LeftNode.WalkTree(); } Console.WriteLine(this.DataNode.ToString()); //是否存在右节点 if (this.RightNode != null) { //递归继续读取 this.RightNode.WalkTree(); } } } }
在Main函数中测试:
class Program { static void Main(string[] args) { //实例化 Tree<char> tree = new Tree<char>('g'); tree.Insert('a'); tree.Insert('m'); tree.Insert('b'); tree.Insert('v'); tree.WalkTree(); Console.Read(); } }
效果图:
输出的数据已排好序