二叉树的前序遍历 中序遍历 后序遍历

淩亂°似流年 2022-12-25 13:53 380阅读 0赞
  1. 树的遍历一般是从左至右,按照根结点在前中后的顺序分为了前序遍历,中序遍历和后序遍历
  2. 前序遍历: 根结点 --》左节点--》右节点
  3. 中序遍历: 左节点--》根结点--》右节点
  4. 后序遍历: 左节点--》右节点--》根节点
  5. 下面写了一个遍历的demo
  6. public class BinaryTree {
  7. private Node root;
  8. public boolean insert(int data){
  9. Node newNode = new Node(data);
  10. if(root == null){
  11. root = newNode;
  12. return true;
  13. }
  14. Node current = root;
  15. Node parentNode = null;
  16. while (current != null){
  17. parentNode = current;
  18. if(current.data > data){
  19. current = current.left;
  20. if(current == null){
  21. parentNode.left = newNode;
  22. return true;
  23. }
  24. }else {
  25. current = current.right;
  26. if(current == null){
  27. parentNode.right = newNode;
  28. return true;
  29. }
  30. }
  31. }
  32. return false;
  33. }
  34. /**
  35. * 中序遍历
  36. * @param current
  37. */
  38. public void inOrder(Node current){
  39. if(current != null){
  40. inOrder(current.left);
  41. System.out.println(current.data);
  42. inOrder(current.right);
  43. }
  44. }
  45. /**
  46. * 前序遍历
  47. * @param current
  48. */
  49. public void preOrder(Node current){
  50. if(current != null){
  51. System.out.println(current.data);
  52. preOrder(current.left);
  53. preOrder(current.right);
  54. }
  55. }
  56. public static void main(String[] args) {
  57. BinaryTree binaryTree = new BinaryTree();
  58. binaryTree.insert(9);
  59. binaryTree.insert(12);
  60. binaryTree.insert(32);
  61. binaryTree.insert(13);
  62. binaryTree.insert(24);
  63. binaryTree.insert(3);
  64. binaryTree.insert(1);
  65. binaryTree.insert(2);
  66. binaryTree.insert(7);
  67. binaryTree.insert(312);
  68. System.out.println("前序遍历");
  69. binaryTree.preOrder(binaryTree.root);
  70. System.out.println("中序遍历");
  71. binaryTree.inOrder(binaryTree.root);
  72. System.out.println("后序遍历");
  73. binaryTree.postOrder(binaryTree.root);
  74. }
  75. /**
  76. * 后序遍历
  77. * @param current
  78. */
  79. public void postOrder(Node current){
  80. if(current != null){
  81. postOrder(current.left);
  82. postOrder(current.right);
  83. System.out.println(current.data);
  84. }
  85. }
  86. private class Node{
  87. private int data;
  88. private Node left;
  89. private Node right;
  90. public Node(int data, Node left, Node right) {
  91. this.data = data;
  92. this.left = left;
  93. this.right = right;
  94. }
  95. public Node(int data){
  96. this.data = data;
  97. }
  98. public int getValue() {
  99. return data;
  100. }
  101. public Node setValue(int data) {
  102. this.data = data;
  103. return this;
  104. }
  105. public Node getLeft() {
  106. return left;
  107. }
  108. public Node setLeft(Node left) {
  109. this.left = left;
  110. return this;
  111. }
  112. public Node getRight() {
  113. return right;
  114. }
  115. public Node setRight(Node right) {
  116. this.right = right;
  117. return this;
  118. }
  119. }
  120. }

可以看到排序二叉树的中序遍历就可以用来排序了

发表评论

表情:
评论列表 (有 0 条评论,380人围观)

还没有评论,来说两句吧...

相关阅读