Skip to content

Commit 76ee6f6

Browse files
author
chenweijie
committed
二叉树
1 parent 68cb9c2 commit 76ee6f6

File tree

3 files changed

+273
-0
lines changed

3 files changed

+273
-0
lines changed
Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
package com.chen.algorithm.tree;
2+
3+
/**
4+
* 二叉树搜索树
5+
*
6+
* @author : chen weijie
7+
* @Date: 2019-04-08 11:22 AM
8+
*/
9+
public class BinaryTree implements Tree {
10+
11+
12+
private Node root;
13+
14+
15+
@Override
16+
public Node find(int key) {
17+
18+
Node current = root;
19+
20+
while (current != null) {
21+
//当前值比查找值大,搜索左子树
22+
if (current.data > key) {
23+
current = current.leftNode;
24+
//当前值比查找值小,搜索右子树
25+
} else if (current.data < key) {
26+
current = current.rightNode;
27+
} else {
28+
return current;
29+
}
30+
}
31+
return null;
32+
}
33+
34+
@Override
35+
public boolean insert(int data) {
36+
37+
Node newNode = new Node(data);
38+
//当前树为空树,没有任何节点
39+
if (root == null) {
40+
root = newNode;
41+
return true;
42+
} else {
43+
Node current = root;
44+
Node parentNode = null;
45+
46+
while (current != null) {
47+
parentNode = current;
48+
//当前值比插入值大,搜索左子节点
49+
if (current.data > data) {
50+
current = current.leftNode;
51+
//左子节点为空,直接将新值插入到该节点
52+
if (current == null) {
53+
parentNode.leftNode = newNode;
54+
return true;
55+
}
56+
} else {
57+
current = current.rightNode;
58+
if (current == null) {
59+
parentNode.rightNode = newNode;
60+
return true;
61+
}
62+
}
63+
}
64+
}
65+
return false;
66+
}
67+
68+
@Override
69+
public boolean delete(int key) {
70+
return false;
71+
}
72+
73+
74+
/**
75+
* 中序遍历
76+
*
77+
* @param current
78+
*/
79+
public void infixOrder(Node current) {
80+
81+
if (current != null) {
82+
infixOrder(current.leftNode);
83+
System.out.println(current.data + " ");
84+
infixOrder(current.rightNode);
85+
}
86+
}
87+
88+
89+
/**
90+
* 前序遍历
91+
*
92+
* @param current
93+
*/
94+
public void preOrder(Node current) {
95+
if (current != null) {
96+
System.out.println(current.data + " ");
97+
preOrder(current.leftNode);
98+
preOrder(current.rightNode);
99+
}
100+
}
101+
102+
/**
103+
* 后序遍历
104+
*
105+
* @param current
106+
*/
107+
public void postOrder(Node current) {
108+
109+
if (current != null) {
110+
postOrder(current.leftNode);
111+
postOrder(current.rightNode);
112+
System.out.println(current.data + " ");
113+
}
114+
}
115+
116+
117+
/**
118+
* 找到最大的节点
119+
*
120+
* @return
121+
*/
122+
public Node findMax() {
123+
Node current = root;
124+
Node maxNode = current;
125+
while (current != null) {
126+
maxNode = current;
127+
current = current.rightNode;
128+
}
129+
return maxNode;
130+
}
131+
132+
/**
133+
* 查找最小节点
134+
*
135+
* @return
136+
*/
137+
public Node finMin() {
138+
Node current = root;
139+
Node minNode = current;
140+
while (current != null) {
141+
minNode = current;
142+
current = current.leftNode;
143+
}
144+
return minNode;
145+
}
146+
147+
public Node getRoot() {
148+
return root;
149+
}
150+
151+
public void setRoot(Node root) {
152+
this.root = root;
153+
}
154+
155+
public static void main(String[] args) {
156+
157+
BinaryTree bt = new BinaryTree();
158+
bt.insert(50);
159+
bt.insert(20);
160+
bt.insert(80);
161+
bt.insert(10);
162+
bt.insert(30);
163+
bt.insert(60);
164+
bt.insert(90);
165+
bt.insert(25);
166+
bt.insert(85);
167+
bt.insert(100);
168+
169+
System.out.println("infixOrder:");
170+
bt.infixOrder(bt.root);
171+
System.out.println("preOrder:");
172+
bt.preOrder(bt.root);
173+
System.out.println("postOrder:");
174+
bt.postOrder(bt.root);
175+
176+
177+
System.out.println("max:" + bt.findMax().data);
178+
System.out.println("min:" + bt.finMin().data);
179+
System.out.println(bt.find(100));
180+
System.out.println(bt.find(200));
181+
182+
183+
}
184+
185+
186+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.chen.algorithm.tree;
2+
3+
/**
4+
* @author : chen weijie
5+
* @Date: 2019-04-08 11:17 AM
6+
*/
7+
public class Node {
8+
9+
int data;
10+
11+
Node leftNode;
12+
13+
Node rightNode;
14+
15+
boolean isDelete;
16+
17+
Node(int data) {
18+
this.data = data;
19+
}
20+
21+
public int getData() {
22+
return data;
23+
}
24+
25+
public void setData(int data) {
26+
this.data = data;
27+
}
28+
29+
public Node getLeftNode() {
30+
return leftNode;
31+
}
32+
33+
public void setLeftNode(Node leftNode) {
34+
this.leftNode = leftNode;
35+
}
36+
37+
public Node getRightNode() {
38+
return rightNode;
39+
}
40+
41+
public void setRightNode(Node rightNode) {
42+
this.rightNode = rightNode;
43+
}
44+
45+
public boolean isDelete() {
46+
return isDelete;
47+
}
48+
49+
public void setDelete(boolean delete) {
50+
isDelete = delete;
51+
}
52+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.chen.algorithm.tree;
2+
3+
/**
4+
* @author : chen weijie
5+
* @Date: 2019-04-08 11:17 AM
6+
*/
7+
public interface Tree {
8+
9+
10+
/**
11+
* 查找节点
12+
*
13+
* @param key
14+
* @return
15+
*/
16+
Node find(int key);
17+
18+
/**
19+
* 插入节点
20+
*
21+
* @param key
22+
* @return
23+
*/
24+
boolean insert(int key);
25+
26+
/**
27+
* 删除节点
28+
*
29+
* @param key
30+
* @return
31+
*/
32+
boolean delete(int key);
33+
34+
35+
}

0 commit comments

Comments
 (0)