马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

二叉树遍历 C#

[复制链接]
查看2894 | 回复0 | 2019-8-13 20:26:28 | 显示全部楼层 |阅读模式

1、在盘算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。(百度百科)

203006sgma5as22mz1ppmr.png

广度优先搜索(Breadth First Search),又叫宽度优先搜索或横向优先搜索,是从根结点开始沿着树的宽度搜索遍历,上面二叉树的遍历顺序为:ABCDEFG.

深度优先搜索(Depth First Search)是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。以上面二叉树为例,深度优先搜索的顺序为:ABDECFG。

2、二叉树的实现

二叉树的结点包含data,left,right,通过一些结点之间的关系就可以构造二叉树;

二叉树节点类

203007a6sas0uy60uwuymv.gif
203007rvn3ja7n7jylh57o.gif
  1. class Node<T>
  2. {
  3. T data;
  4. Node<T> left;
  5. Node<T> right;
  6. public Node(T value)
  7. {
  8. data = value;
  9. left = null;
  10. right = null;
  11. }
  12. public Node()
  13. {
  14. data = default(T);
  15. left = null;
  16. right = null;
  17. }
  18. public Node(T value,Node<T> lChild,Node<T> rChild)
  19. {
  20. data = value;
  21. left = lChild;
  22. right = rChild;
  23. }
  24. public T Data
  25. {
  26. get { return data; }
  27. set { data = value; }
  28. }
  29. public Node<T> Left
  30. {
  31. get { return left; }
  32. set { left = value; }
  33. }
  34. public Node<T> Right
  35. {
  36. get { return right; }
  37. set { right = value; }
  38. }
  39. }
复制代码
View Code

3、二叉树类

203007guzukjx1dbrkfgro.gif
203007wegzqm9lzi3mep3b.gif
  1. class LinkBinaryTree<T>
  2. {
  3. private Node<T> root;//根结点
  4. public Node<T> Root
  5. {
  6. get { return root; }
  7. }
  8. public LinkBinaryTree()
  9. {
  10. root = null;
  11. }
  12. public LinkBinaryTree(T value)
  13. {
  14. Node<T> p = new Node<T>(value);
  15. root = p;
  16. }
  17. //三种深度遍历
  18. //中序遍历
  19. public void InOrder(Node<T> node)
  20. {
  21. if (root == null)
  22. return;
  23. if(node!=null)
  24. {
  25. InOrder(node.Left);
  26. Console.Write(node.Data);
  27. InOrder(node.Right);
  28. }
  29. }
  30. //先序遍历
  31. public void PreOrder(Node<T> node)
  32. {
  33. if (root == null)
  34. return;
  35. if (node != null)
  36. {
  37. Console.Write(node.Data);
  38. PreOrder(node.Left);
  39. PreOrder(node.Right);
  40. }
  41. }
  42. //后序遍历
  43. public void PostOrder(Node<T> node)
  44. {
  45. if (root == null)
  46. return;
  47. if (node != null)
  48. {
  49. PostOrder(node.Left);
  50. PostOrder(node.Right);
  51. Console.Write(node.Data);
  52. }
  53. }
  54. //-------广度遍历----------使用队列又称为先辈先出
  55. public void BFS(Node<T> root)
  56. {
  57. if (root == null)
  58. return;
  59. Queue<Node<T>> queue = new Queue<Node<T>>();
  60. queue.Enqueue(root);
  61. while (queue.Count>0)
  62. {
  63. Node<T> node = queue.Dequeue();
  64. Console.WriteLine(node.Data);
  65. if (node.Left != null)
  66. queue.Enqueue(node.Left);
  67. if (node.Right != null)
  68. queue.Enqueue(node.Right);
  69. }
  70. }
  71. }
复制代码
View Code

203007sc3wsbbu9c1uzgew.png

深度遍历:(根节点A的位置)

  先序输出:A B D G H E C K F I J

  中序输出:G D H B E A K C I J F

  后序输出:G H D E B K J I F C A

广度遍历:

  A B C D E K F G H I J

面试遇到的,于是在网上学习,自己总结一下。小菜瓜,第一次发。有什么问题望多多提,一起学习。往后我会把自己总结的Unity lua等都会一一发出来共享。独乐乐不如众乐乐嘛,一起进步。------一点都不v5的小菜瓜。


来源:https://www.cnblogs.com/yuanwenqiang/p/11347886.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则