二叉树的创建,前序、中序、后序遍历。看了网上的写法后,我之前用c 语言写过链表、栈和队列,受到指针的启发,在java中我用引用改写了下二叉树的遍历过程。
代码如下:
1 import java.util.Objects;
2
3 public class Main {
4 public static void main(String[] args) {
5 //创建节点
6 Node rootNode = new Node();
7 rootNode.setData("唐僧");
8 rootNode.setNo(1);
9 Node node1 = new Node();
10 node1.setData("孙悟空");
11 node1.setNo(2);
12 Node node2 = new Node();
13 node2.setData("猪八戒");
14 node2.setNo(3);
15 Node node3 = new Node();
16 node3.setData("沙和尚");
17 node3.setNo(4);
18 Node node4 = new Node();
19 node4.setNo(5);
20 node4.setData("白龙马");
21 //挂数据
22 rootNode.setLeftNode(node1);
23 rootNode.setRightNode(node2);
24 node2.setRightNode(node3);
25 node2.setLeftNode(node4);
26 //打印输出
27 BinaryTree tree = new BinaryTree();
28 System.out.println("前序遍历");
29 tree.preOrder(rootNode);
30 System.out.println("中序遍历");
31 tree.middleOrder(rootNode);
32 System.out.println("后序遍历");
33 tree.backOrder(rootNode);
34 }
35
36 }
37 class BinaryTree {
38
39 //前序遍历 父的先后
40 public void preOrder(Node node) {
41 System.out.println(node.toString());
42 if(Objects.nonNull(node.getLeftNode())) {
43 preOrder(node.getLeftNode());
44 }
45 if(Objects.nonNull(node.getRightNode())) {
46 preOrder(node.getRightNode());
47 }
48 }
49 public void middleOrder(Node node) {
50 if(Objects.nonNull(node.getLeftNode())) {
51 middleOrder(node.getLeftNode());
52 }
53 System.out.println(node.toString());
54 if(Objects.nonNull(node.getRightNode())) {
55 middleOrder(node.getRightNode());
56 }
57 }
58 public void backOrder(Node node) {
59
60 if(Objects.nonNull(node.getLeftNode())) {
61 backOrder(node.getLeftNode());
62 }
63 if(Objects.nonNull(node.getRightNode())) {
64 backOrder(node.getRightNode());
65 }
66 System.out.println(node.toString());
67 }
68 }
69
70 //定义节点结构
71 class Node {
72 private Node leftNode;
73 private Node rightNode;
74 private String data;
75 private int no;
76
77 public int getNo() {
78 return no;
79 }
80
81 public void setNo(int no) {
82 this.no = no;
83 }
84
85
86
87
88 public Node getLeftNode() {
89 return leftNode;
90 }
91
92 public void setLeftNode(Node leftNode) {
93 this.leftNode = leftNode;
94 }
95
96 public Node getRightNode() {
97 return rightNode;
98 }
99
100 public void setRightNode(Node rightNode) {
101 this.rightNode = rightNode;
102 }
103
104 public String getData() {
105 return data;
106 }
107
108 public void setData(String data) {
109 this.data = data;
110 }
111
112 @Override
113 public String toString() {
114 return "Node{" +
115 "data='" + data + '/'' +
116 ", no=" + no +
117 '}';
118 }
119 }
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/288618.html