1614175659343

    1. package com.atguigu.tree;
    2. import com.sun.media.sound.SoftTuning;
    3. /**
    4. * @author victor
    5. * @site https://victorfengming.gitee.io/
    6. * @project data_algorithm
    7. * @package com.atguigu.tree
    8. * @created 2021-02-24 21:40
    9. */
    10. public class BinaryTreeDemo {
    11. public static void main(String[] args) {
    12. }
    13. }
    14. // 定义一个 BinaryTree
    15. class BinaryTree {
    16. private HeroNode root;
    17. public void setRoot(HeroNode root) {
    18. this.root = root;
    19. }
    20. // 真正的遍历操作
    21. // 前序遍历
    22. public void preOrder() {
    23. if (this.root != null) {
    24. this.root.preOrder();
    25. } else {
    26. System.out.println("当前二叉树为空,无法遍历!");
    27. }
    28. }
    29. // 中序遍历
    30. public void infixOrder() {
    31. if (this.root != null) {
    32. this.root.infixOrder();
    33. } else {
    34. System.out.println("二叉树为空,无法遍历");
    35. }
    36. }
    37. // 后续遍历
    38. public void postOrder() {
    39. if (this.root != null) {
    40. this.root.postOrder();
    41. } else {
    42. System.out.println("二叉树为空,无法遍历");
    43. }
    44. }
    45. }
    46. // 先创建 HeroNode 结点
    47. class HeroNode {
    48. private int no;
    49. private String name;
    50. private HeroNode left; // 默认为空
    51. private HeroNode right; // 默认为空
    52. public HeroNode(int no, String name) {
    53. this.no = no;
    54. this.name = name;
    55. }
    56. @Override
    57. public String toString() {
    58. return "HeroNode{" +
    59. "no=" + no +
    60. ", name='" + name + '\'' +
    61. '}';
    62. }
    63. public int getNo() {
    64. return no;
    65. }
    66. public void setNo(int no) {
    67. this.no = no;
    68. }
    69. public String getName() {
    70. return name;
    71. }
    72. public void setName(String name) {
    73. this.name = name;
    74. }
    75. public HeroNode getLeft() {
    76. return left;
    77. }
    78. public void setLeft(HeroNode left) {
    79. this.left = left;
    80. }
    81. public HeroNode getRight() {
    82. return right;
    83. }
    84. public void setRight(HeroNode right) {
    85. this.right = right;
    86. }
    87. // 编写前序遍历的方法
    88. public void preOrder() {
    89. //
    90. System.out.println(this);
    91. // 先输出父节点
    92. // 递归向左子树前序比遍历
    93. if (this.left != null) {
    94. // 左边递归
    95. this.left.preOrder();
    96. }
    97. // 递归向右子树前序遍历
    98. if (this.right != null) {
    99. this.right.preOrder();
    100. }
    101. }
    102. // 中序遍历
    103. public void infixOrder() {
    104. // 递归向左子树中序遍历
    105. if (this.left != null) {
    106. this.left.infixOrder();
    107. }
    108. // 输出父节点
    109. System.out.println(this);
    110. // 递归向右子树遍历
    111. if (this.right != null) {
    112. this.right.infixOrder();
    113. }
    114. }
    115. // 后续遍历
    116. public void postOrder() {
    117. if (this.left != null) {
    118. this.left.postOrder();
    119. }
    120. if (this.right != null) {
    121. this.right.postOrder();
    122. }
    123. System.out.println(this);
    124. }
    125. }
    126. // 结点的方法
    1. public static void main(String[] args) {
    2. // 先需要创建一颗二叉树
    3. BinaryTree binaryTree = new BinaryTree();
    4. // 创建需要的节点
    5. HeroNode root = new HeroNode(1, "松江");
    6. HeroNode node2 = new HeroNode(2, "吴用");
    7. HeroNode node3 = new HeroNode(3, "卢俊义");
    8. HeroNode node4 = new HeroNode(4, "林冲");
    9. // 说明: 这里我们先手动创建的二叉树
    10. // ,后面我们学习递归的方式创建二叉树
    11. root.setLeft(node2);
    12. root.setRight(node3);
    13. node3.setRight(node4);
    14. binaryTree.setRoot(root);
    15. // 目前就挂载好了,二叉树的关系
    16. // 测试
    17. System.out.println("前序遍历");//1,2,3,4
    18. binaryTree.preOrder();
    19. }
    1. 前序遍历
    2. HeroNode{no=1, name='松江'}
    3. HeroNode{no=2, name='吴用'}
    4. HeroNode{no=3, name='卢俊义'}
    5. HeroNode{no=4, name='林冲'}
    6. Process finished with exit code 0

    后面两个

    1. System.out.println("前序遍历");//1,2,3,4
    2. binaryTree.preOrder();
    3. System.out.println("中序遍历");//2,1,3,4
    4. binaryTree.infixOrder();
    5. System.out.println("后序遍历");//2431
    6. binaryTree.postOrder();
    1. 前序遍历
    2. HeroNode{no=1, name='松江'}
    3. HeroNode{no=2, name='吴用'}
    4. HeroNode{no=3, name='卢俊义'}
    5. HeroNode{no=4, name='林冲'}
    6. 中序遍历
    7. HeroNode{no=2, name='吴用'}
    8. HeroNode{no=1, name='松江'}
    9. HeroNode{no=3, name='卢俊义'}
    10. HeroNode{no=4, name='林冲'}
    11. 后序遍历
    12. HeroNode{no=2, name='吴用'}
    13. HeroNode{no=4, name='林冲'}
    14. HeroNode{no=3, name='卢俊义'}
    15. HeroNode{no=1, name='松江'}
    16. Process finished with exit code 0

    然后我现在要看看你是不是真的会了
    我再增加一个节点
    关胜

    1. public static void main(String[] args) {
    2. // 先需要创建一颗二叉树
    3. BinaryTree binaryTree = new BinaryTree();
    4. // 创建需要的节点
    5. HeroNode root = new HeroNode(1, "松江");
    6. HeroNode node2 = new HeroNode(2, "吴用");
    7. HeroNode node3 = new HeroNode(3, "卢俊义");
    8. HeroNode node4 = new HeroNode(4, "林冲");
    9. HeroNode node5 = new HeroNode(5, "关胜");
    10. // 说明: 这里我们先手动创建的二叉树
    11. // ,后面我们学习递归的方式创建二叉树
    12. root.setLeft(node2);
    13. root.setRight(node3);
    14. node3.setRight(node4);
    15. node3.setLeft(node5);
    16. binaryTree.setRoot(root);
    17. // 目前就挂载好了,二叉树的关系
    18. // 测试
    19. System.out.println("前序遍历");//1,2,3,5,4
    20. binaryTree.preOrder();
    21. System.out.println("中序遍历");//2,1,5.3.4
    22. binaryTree.infixOrder();
    23. System.out.println("后序遍历");//2,5,4,3,1
    24. binaryTree.postOrder();
    25. }

    1614175749880

    1. 前序遍历
    2. HeroNode{no=1, name='松江'}
    3. HeroNode{no=2, name='吴用'}
    4. HeroNode{no=3, name='卢俊义'}
    5. HeroNode{no=5, name='关胜'}
    6. HeroNode{no=4, name='林冲'}
    7. 中序遍历
    8. HeroNode{no=2, name='吴用'}
    9. HeroNode{no=1, name='松江'}
    10. HeroNode{no=5, name='关胜'}
    11. HeroNode{no=3, name='卢俊义'}
    12. HeroNode{no=4, name='林冲'}
    13. 后序遍历
    14. HeroNode{no=2, name='吴用'}
    15. HeroNode{no=5, name='关胜'}
    16. HeroNode{no=4, name='林冲'}
    17. HeroNode{no=3, name='卢俊义'}
    18. HeroNode{no=1, name='松江'}
    19. Process finished with exit code 0