C#实现二叉树遍历

简介:

using System ; using System.Collections.Generic; using System .Text; namespace structure { class Program { class nodes<T> { T data; nodes<T> Lnode,rnode,pnode; public T Data { get {return data;} set{data =value;} } public nodes<T>LNode { get {return Lnode ;} set {Lnode =value;} } public nodes<T>RNode { get {return rnode ;} set {rnode =value;} } public nodes<T>PNode { get {return pnode ;} set {pnode =value;} } public nodes(){} public nodes(T data) { this.data =data ; } } //构造一棵已知的二叉树 static nodes<string>BinTree() { nodes<string>[] binTree=new nodes<string>[8]; //创建节点 binTree [0]=new nodes<string> ("A"); binTree [1]=new nodes<string> ("B"); binTree [2]=new nodes<string> ("C"); binTree [3]=new nodes<string> ("D"); binTree [4]=new nodes<string> ("E"); binTree [5]=new nodes<string> ("F"); binTree [6]=new nodes<string> ("G"); binTree [7]=new nodes<string> ("H"); //使用层次遍历二叉树的思想,构造一个已知的二叉树 binTree [0].LNode=binTree [1]; binTree [0].RNode=binTree [2]; binTree [1].RNode =binTree [3]; binTree [2].LNode=binTree [4]; binTree [2].RNode=binTree [5]; binTree [3].LNode =binTree [6]; binTree[3].RNode=binTree [7]; //返回二叉树根节点 return binTree [0]; } //先序遍历 static void PreOrder<T>(nodes<T> rootNode) { if(rootNode !=null ) { Console.WriteLine(rootNode.Data); PreOrder <T>(rootNode.LNode ); PreOrder <T>(rootNode.RNode); } } //中序遍历二叉树 static void MidOrder<T>(nodes<T> rootNode) { if (rootNode != null) { MidOrder<T>(rootNode.LNode); Console.WriteLine(rootNode.Data); MidOrder<T>(rootNode.RNode); } } //后序遍历二叉树 static void AfterOrder<T>(nodes<T> rootNode) { if (rootNode != null) { AfterOrder<T>(rootNode.LNode); AfterOrder<T>(rootNode.RNode); Console.WriteLine(rootNode.Data); } } //层次遍历二叉树 static void LayerOrder<T>(nodes<T> rootNode) { nodes<T>[] Nodes = new nodes<T>[20]; int front = -1; int rear = -1; if (rootNode != null) { rear++; Nodes[rear] = rootNode; } while (front != rear) { front++; rootNode = Nodes[front]; Console.WriteLine(rootNode.Data); if (rootNode.LNode != null) { rear++; Nodes[rear] = rootNode.LNode; } if (rootNode.RNode != null) { rear++; Nodes[rear] = rootNode.RNode; } } } //测试的主方法 static void Main(string[] args) { nodes<string> rootNode = BinTree(); Console.WriteLine("先序遍历方法遍历二叉树:"); PreOrder<string>(rootNode); Console.WriteLine("中序遍历方法遍历二叉树:"); MidOrder<string>(rootNode); Console.WriteLine("后序遍历方法遍历二叉树:"); AfterOrder<string>(rootNode); Console.WriteLine("层次遍历方法遍历二叉树:"); LayerOrder<string>(rootNode); Console.Read(); } } }

目录
相关文章
|
1月前
|
C#
C#学习相关系列之自定义遍历器
C#学习相关系列之自定义遍历器
|
9月前
|
C#
C#遍历文件夹
C#遍历文件夹
89 0
|
11月前
|
C#
C#《数据结构》二叉树的创建和遍历
C#《数据结构》二叉树的创建和遍历
110 0
|
API C# Windows
C#实现操作Windows窗口句柄:遍历、查找窗体和控件【窗口句柄最全总结之一】
C#对Windows窗口或窗口句柄的操作,都是通过 P/Invoke Win32 API 实现的,DllImport引入Windows API操作窗口(句柄),可以实现枚举已打开的窗口、向窗口...
2087 0
C#实现操作Windows窗口句柄:遍历、查找窗体和控件【窗口句柄最全总结之一】
C#编程-141:读取注册表(遍历
C#编程-141:读取注册表(遍历
136 0
C#编程-141:读取注册表(遍历
C#编程-89:Hashtable添加键值和遍历
C#编程-89:Hashtable添加键值和遍历
C#编程-89:Hashtable添加键值和遍历
C#编程-18:遍历某一路径下所有文件和文件夹
C#编程-18:遍历某一路径下所有文件和文件夹
446 0
C#编程-141:读取注册表(遍历)
C#编程-141:读取注册表(遍历)
155 0
C#编程-141:读取注册表(遍历)