知识大全 二叉树遍历算法C#实现

Posted 结点

篇首语:常说口里顺,常做手不笨。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 二叉树遍历算法C#实现相关的知识,希望对你有一定的参考价值。

二叉树遍历算法C#实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  用C# 实现了二叉树的定义 怎么构造一颗已知的二叉树 用几种常规的算法(先序 中序 后序 层次)遍历二叉树 希望能给有需要人带来帮助 也希望能得到大家的指点 有关C#数据结构的书在书店里找到 网上也是极少 如果你有好的学习资源别忘了告诉我 先谢了 数据结构对一个程序员来说 现在是太重要了 数据结构学得好的人 逻辑思维一定很强 在程序设计的时候 就不会觉得太费劲了 而且是在设计多层应用程序的时候 真是让人绞尽脑汁啊 趁自己还年轻 赶紧练练脑子 哈哈 咱们尽快进入主题吧

  本程序中将用到一棵已知的二叉树如图(二叉树图)所示

  

  下面简单介绍一下几种算法和思路

  先序遍历

   访问根结点

   按先序遍历左子树;

   按先序遍历右子树

   例如 遍历已知二叉树结果为 A >B >D >G >H >C >E >F

  中序遍历

   按中序遍历左子树;

   访问根结点

   按中序遍历右子树

   例如遍历已知二叉树的结果 B >G >D >H >A >E >C >F

  后序遍历

   按后序遍历左子树

   按后序遍历右子树

   访问根结点

   例如遍历已知二叉树的结果 G >H >D >B >E >F >C >A

  层次遍历

   从上到下 从左到右遍历二叉树的各个结点(实现时需要借辅助容器)

   例如遍历已知二叉树的结果 A >B >C >D >E >F >G >H

  附加整个解决方案代码

  二叉遍历算法解决方案

  using System;

  using System Collections Generic;

  using System Text;

  namespace structure

  

  class Program

  

  二叉树结点数据结构的定义#region 二叉树结点数据结构的定义

  //二叉树结点数据结构包括数据域 左右结点以及父结点成员

  class nodes<T>

  

  T data;

  nodes<T> Lnode Rnode Pnode;

  public T Data

  

  set data = value;

  get return data;

  

  public nodes<T> LNode

  

  set Lnode = value;

  get return Lnode;

  

  public nodes<T> RNode

  

  set Rnode = value;

  get return Rnode;

  

  public nodes<T> PNode

  

  set Pnode = value;

  get return Pnode;

  

  public nodes()

  

  public nodes(T data)

  

  this data = data;

  

  

  #endregion

  先序编历二叉树#region 先序编历二叉树

  static void PreOrder<T>(nodes<T> rootNode)

  

  if (rootNode != null)

  

  Console WriteLine(rootNode Data);

  PreOrder<T>(rootNode LNode);

  PreOrder<T>(rootNode RNode);

  

  

  #endregion

  构造一棵已知的二叉树#region 构造一棵已知的二叉树

  static nodes<string> BinTree()

  

  nodes<string>[] binTree = new nodes<string>[ ];

  //创建结点

  binTree[ ] = new nodes<string>( A );

  binTree[ ] = new nodes<string>( B );

  binTree[ ] = new nodes<string>( C );

  binTree[ ] = new nodes<string>( D );

  binTree[ ] = new nodes<string>( E );

  binTree[ ] = new nodes<string>( F );

  binTree[ ] = new nodes<string>( G );

  binTree[ ] = new nodes<string>( H );

  //使用层次遍历二叉树的思想 构造一个已知的二叉树

  binTree[ ] LNode = binTree[ ];

  binTree[ ] RNode = binTree[ ];

  binTree[ ] RNode = binTree[ ];

  binTree[ ] LNode = binTree[ ];

  binTree[ ] RNode = binTree[ ];

  binTree[ ] LNode = binTree[ ];

  binTree[ ] RNode = binTree[ ];

  //返回二叉树的根结点

  return binTree[ ];

  

  #endregion

  中序遍历二叉树#region 中序遍历二叉树

  static void MidOrder<T>(nodes<T> rootNode)

  

  if (rootNode != null)

  

  MidOrder<T>(rootNode LNode);

  Console WriteLine(rootNode Data);

  MidOrder<T>(rootNode RNode);

  

  

  #endregion

  后序遍历二叉树#region 后序遍历二叉树

  static void AfterOrder<T>(nodes<T> rootNode)

  

  if (rootNode != null)

  

  AfterOrder<T>(rootNode LNode);

  AfterOrder<T>(rootNode RNode);

  Console WriteLine(rootNode Data);

  

  

  #endregion

  层次遍历二叉树#region 层次遍历二叉树

  static void LayerOrder<T>(nodes<T> rootNode)

  

  nodes<T>[] Nodes = new nodes<T>[ ];

  int front = ;

  int rear = ;

  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;

  

  

  

  #endregion

  测试的主方法#region 测试的主方法

  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();

  

  #endregion

  

cha138/Article/program/net/201311/12089

相关参考