二叉树(简单版)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 二叉树(简单版)

二叉树(简单版)

 2015/2/11 3:36:27  冬天里-春天  程序员俱乐部  我要评论(0)
  • 摘要:树是一种非线性结构,树的本质是将一些节点由边连接起来,形成层级的结构,即1:N的关系,下面是手动构建数据之间的关系:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceTree3{//手动构建节点之间的关系publicclassProgram{staticvoidMain(string[]args){Node<string>rootNode=BinTree()
  • 标签:二叉树
class="brush:csharp;gutter:true;"> 树是一种非线性结构,树的本质是将一些节点由边连接起来,形成层级的结构,即1:N的关系,下面是手动构建数据之间的关系:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Tree3 { //手动构建节点之间的关系 public class Program { static void Main(string[] args) { Node<string> rootNode =BinTree(); Console.WriteLine("先序遍历方法遍历hashu.html" target="_blank">二叉树: "); PreOrde(rootNode); Console.WriteLine(""); Console.WriteLine(""); Console.WriteLine("中序遍历方法遍历二叉树:"); InOrde(rootNode); Console.WriteLine(""); Console.WriteLine(""); Console.WriteLine("后序遍历方法遍历二叉树:"); AfterOrde(rootNode); Console.ReadKey(); } /// <summary> /// 构建二叉树 /// </summary> /// <returns></returns> public static Node<string> BinTree() { Node<string>[] binTree = new Node<string>[11]; //创建节点 binTree[0] = new Node<string>("A"); binTree[1] = new Node<string>("B"); binTree[2] = new Node<string>("C"); binTree[3] = new Node<string>("D"); binTree[4] = new Node<string>("E"); binTree[5] = new Node<string>("F"); binTree[6] = new Node<string>("G"); binTree[7] = new Node<string>("H"); binTree[8] = new Node<string>("J"); binTree[9] = new Node<string>("K"); binTree[10] = new Node<string>("L"); //构建关系 binTree[0].LNode = binTree[1]; binTree[0].RNode = binTree[2]; binTree[1].LNode = binTree[3]; binTree[1].RNode = binTree[4]; binTree[2].LNode = binTree[6]; binTree[2].RNode = binTree[7]; binTree[6].RNode = binTree[8]; binTree[7].RNode = binTree[9]; binTree[8].RNode = binTree[10]; //返回跟节点 return binTree[0]; } /// <summary> /// 先序遍历(先访问跟节点->在访问左孩子->在访问右孩子)递归 /// 注意的是:遍历左右子树时仍然采用中序遍历方法。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="rootNode"></param> public static void PreOrde<T>(Node<T> rootNode) { if (rootNode != null) { Console.Write(string.Format("{0} ", rootNode.Data)); PreOrde(rootNode.LNode); PreOrde(rootNode.RNode); } } /// <summary> /// 中序遍历(先访问左节点->在访问跟节点->在访问右孩子)递归 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="rootNode"></param> public static void InOrde<T>(Node<T> rootNode) { if (rootNode != null) { InOrde(rootNode.LNode); Console.Write(string.Format("{0} ", rootNode.Data)); InOrde(rootNode.RNode); } } /// <summary> /// 后序遍历(先访问左节点->在访问右节点->在访问跟孩子)递归 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="rootNode"></param> public static void AfterOrde<T>(Node<T> rootNode) { if (rootNode != null) { AfterOrde(rootNode.LNode); AfterOrde(rootNode.RNode); Console.Write(string.Format("{0} ", rootNode.Data)); } } } //节点类 public class Node<T> { private T data; /// <summary> /// 数据 /// </summary> public T Data { get { return data; } set { data = value; } } private Node<T> lnode; /// <summary> /// 左孩子 /// </summary> public Node<T> LNode { get { return lnode; } set { lnode = value; } } private Node<T> rnode; /// <summary> /// 右孩子 /// </summary> public Node<T> RNode { get { return rnode; } set { rnode = value; } } /// <summary> /// 无参构造函数 /// </summary> public Node() { } /// <summary> /// 节点构造函数 /// </summary> /// <param name="data"></param> public Node(T data) { this.data = data; } } }

运行结果:


 

发表评论
用户名: 匿名