C#实现中的二叉搜索树

前端之家收集整理的这篇文章主要介绍了C#实现中的二叉搜索树前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. class Node
  2. {
  3. public int data;
  4. public Node left,right;
  5.  
  6. public Node(int data)
  7. {
  8. this.data = data;
  9. left = null;
  10. right = null;
  11.  
  12. }
  13. }
  14.  
  15. class BinaryTreeImp
  16. {
  17. Node root;
  18. static int count = 0;
  19.  
  20. public BinaryTreeImp()
  21. {
  22. root = null;
  23.  
  24. }
  25. public Node addNode(int data)
  26. {
  27. Node newNode = new Node(data);
  28.  
  29. if (root == null)
  30. {
  31. root = newNode;
  32.  
  33. }
  34. count++;
  35. return newNode;
  36.  
  37.  
  38. }
  39.  
  40. public void insertNode(Node root,Node newNode )
  41. {
  42. Node temp;
  43. temp = root;
  44.  
  45. if (newNode.data < temp.data)
  46. {
  47. if (temp.left == null)
  48. {
  49. temp.left = newNode;
  50.  
  51. }
  52.  
  53. else
  54. {
  55. temp = temp.left;
  56. insertNode(temp,newNode);
  57.  
  58. }
  59. }
  60. else if (newNode.data > temp.data)
  61. {
  62. if (temp.right == null)
  63. {
  64. temp.right = newNode;
  65.  
  66. }
  67.  
  68. else
  69. {
  70. temp = temp.right;
  71. insertNode(temp,newNode);
  72. }
  73. }
  74. }
  75.  
  76.  
  77. public void displayTree(Node root)
  78. {
  79. Node temp;
  80. temp = root;
  81.  
  82. if (temp == null)
  83. return;
  84. displayTree(temp.left);
  85. System.Console.Write(temp.data + " ");
  86. displayTree(temp.right);
  87.  
  88.  
  89. }
  90.  
  91. static void Main(string[] args)
  92. {
  93. BinaryTreeImp btObj = new BinaryTreeImp();
  94. Node iniRoot= btObj.addNode(5);
  95.  
  96.  
  97. btObj.insertNode(btObj.root,iniRoot);
  98. btObj.insertNode(btObj.root,btObj.addNode(6));
  99. btObj.insertNode(btObj.root,btObj.addNode(10));
  100. btObj.insertNode(btObj.root,btObj.addNode(2));
  101. btObj.insertNode(btObj.root,btObj.addNode(3));
  102. btObj.displayTree(btObj.root);
  103.  
  104. System.Console.WriteLine("The sum of nodes are " + count);
  105. Console.ReadLine();
  106.  
  107. }
  108. }

这是实现的代码.代码工作正常,但如果在displayTree函数中,我替换它

  1. public void displayTree(Node root)
  2. {
  3. Node temp;
  4. temp = root;
  5.  
  6. while(temp!=null)
  7. {
  8. displayTree(temp.left);
  9. System.Console.Write(temp.data + " ");
  10. displayTree(temp.right);
  11. }
  12.  
  13. }

导致无限循环.我不明白是什么导致了这一点.我想知道是否有更好的方法在C#中实现BST.

解决方法

我不确定你为什么需要这个循环,但回答你的问题:
  1. while(temp!=null)
  2. {
  3. displayTree(temp.left);
  4. System.Console.Write(temp.data + " ");
  5. displayTree(temp.right);
  6. }

代码检查temp是否为null,但它永远不会变为null,因为在循环内部,您只对temp的叶子起作用.这就是为什么你有一个无限循环.

猜你在找的C#相关文章