Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 0a17a9f

Browse files
【added】树以及两大基本排序,包含逐步优化
1 parent 102e66c commit 0a17a9f

7 files changed

+566
-0
lines changed
Lines changed: 280 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,280 @@
1+
package tree;
2+
3+
import java.util.Scanner;
4+
5+
class CBTType{ //����������������
6+
String data; //Ԫ�ؽ������
7+
CBTType left; //��������������������
8+
CBTType right; //��������������������
9+
}
10+
11+
12+
public class TreeList {
13+
static final int MAXLEN=3;
14+
static Scanner input= new Scanner(System.in);
15+
16+
17+
//��ʼ���������������ڴ棬Ȼ������һ����������ݣ�����ָ��������������������������Ϊ��
18+
CBTType InitTree(){ //��ʼ���������ĸ�
19+
CBTType node;
20+
if((node=new CBTType())!=null){ //�����ڴ�
21+
System.out.print("��������һ����������ݣ�\n");
22+
node.data=input.next();
23+
node.left=null;
24+
node.right=null;
25+
if(node!=null){ //�������������㲻Ϊ��
26+
return node;
27+
}else{
28+
return null;
29+
}
30+
}
31+
return null;
32+
}
33+
34+
//���ӽ��:���ӽ��ɦ����Ҫ�����������⣬��Ҫָ���丸��㣬�Լ����ӵĽ������Ϊ����������������
35+
void AddTreeNode(CBTType treeNode){ //treeNodeΪ�������ĸ���㣬��������ȥ���Ҹö�����.
36+
//�˷����������ڴ棬Ȼ�����������������ݣ���������������Ϊ�ա�����ָ�������
37+
CBTType pnode,parent; //pnode��Ϊ������㣬parent��Ϊ�����
38+
String data; //��Ҫ���ӵĽ������
39+
int menusel;
40+
41+
if((pnode=new CBTType())!=null){ //Ϊ�����������ڴ�
42+
System.out.print("����������������: \n");
43+
pnode.data=input.next();
44+
pnode.left=null;
45+
pnode.right=null;
46+
47+
System.out.print("����ý��ĸ�������ݣ�"); //���븸�������
48+
data=input.next();
49+
50+
parent=TreeFindNode(treeNode,data); //������������ĸ�������ݣ�����ָ�����ݵĽ��
51+
if(parent==null){ //���û�ҵ�
52+
System.out.print("δ�ҵ��ø���㣡\n");
53+
pnode=null; //�ͷŴ����Ľ���ڴ�
54+
return;
55+
}
56+
//ѡ����
57+
System.out.printf("1.���Ӹý�㵽������\n 2.���Ӹý�㵽������\n ��1��2���˳�");
58+
do{
59+
menusel=input.nextInt(); //����ѡ����
60+
if(menusel==1||menusel==2){
61+
if(parent==null){ //�ո��Dz���ָ�����ݵĽ�㣬û�ҵ������
62+
System.out.print("�����ڸ���㣬�������ø����!\n");
63+
}else{
64+
switch(menusel){
65+
case 1: //���ӵ����������
66+
if(parent.left!=null){ //����������
67+
System.out.print("��������㲻Ϊ�գ�\n");
68+
}else{
69+
parent.left=pnode;
70+
}
71+
break;
72+
case 2: //���ӵ����������
73+
if(parent.right!=null){ //����������
74+
System.out.print("��������㲻Ϊ�գ�\n");
75+
}else{
76+
parent.right=pnode;
77+
}
78+
break;
79+
default:
80+
System.out.print("��������\n");
81+
}
82+
}
83+
}
84+
}while(menusel!=1&&menusel!=2);
85+
}
86+
87+
}
88+
//���Ҳ���������������ÿһ����㣬����Ա����ݣ����ҵ�L·�����ݾͷ��ظ��������ڽ�������
89+
CBTType TreeFindNode(CBTType treeNode,String data){ //���ҽ��.treeNodeΪ�����ҵĶ������ĸ���㣬�������dataΪ�����ҵĽ�����ݡ�
90+
//���жϸ�����Ƿ�Ϊ�գ�Ȼ�������������ݹ���ҡ������ǰ�������������������ȣ��򷵻ص�ǰ��������.
91+
CBTType ptr; //��һ���ٽ�����ĵõ���ѯ���Ľ�����ݣ�������ѯ�Ա�
92+
if(treeNode==null){
93+
return null;
94+
}
95+
else{
96+
if(treeNode.data.equals(data)){
97+
return treeNode;
98+
}
99+
else { //�ֱ������������ݹ����
100+
if((ptr=TreeFindNode(treeNode.left,data))!=null){ //�� ���������
101+
return ptr;
102+
}else if((ptr=TreeFindNode(treeNode.right,data))!=null){ //�����������
103+
return ptr;
104+
}else{
105+
return null;
106+
}
107+
}
108+
}
109+
}
110+
111+
//��ʾ������ݲ�����������ʾ��ǰ�����������ݡ�pΪ����ʾ��㡣
112+
void TreeNodeData(CBTType p){ //��ʾ�������
113+
System.out.printf("%s",p.data); //����������
114+
}
115+
/**
116+
* ǰ�������Ҳ���ȸ�������������˳���ǣ�������������������
117+
* ���������Ҳ���и�������˳���� ������������������
118+
* ���������Ҳ�к������������˳��������������������
119+
* @param treeNode
120+
*/
121+
122+
//������������ȷ��y����Ȼ����������������������������ڱ�����������ɦ����Ȼ�ȷ��y���㣬Ȼ������������������������������������Ϊ���򷵻ء����ݹ��˼·����������������
123+
//�����treeNodeΪ�Ҷ����������
124+
void DLRTree(CBTType treeNode){
125+
if(treeNode!=null){
126+
TreeNodeData(treeNode); //��ʾ��������
127+
DLRTree(treeNode.left); //���õݹ�˼�룡�������������������ñ������������˵ݹ���ھ����ڲ��ρ���ɦ��ֱ��һ���������Ϊ�ա�
128+
DLRTree(treeNode.right); //�ݹ�ǰ�����ǣ�һ��ʼ��������������㲻Ϊ�գ����������Ҳ��Ϊ�ա������Ϊ�գ��ͻ�����������滻������㡣
129+
}
130+
}
131+
132+
//�������:���ȱ�����������Ȼ����y���㣬���������������ڱ�����������ɦ����Ȼ�ȱ������������ۇٴ��y���㣬������������
133+
void LDRTree(CBTType treeNode){
134+
if(treeNode!=null){
135+
LDRTree(treeNode.left); //�������������
136+
TreeNodeData(treeNode); //��ʾ�������
137+
LDRTree(treeNode.right); //�������������
138+
}
139+
}
140+
141+
//������������ȱ�����������Ȼ������������������y���㣬�ڱ�����������ɦ����Ȼ�ȱ�����������Ȼ�����������������������㡣
142+
// treeNodeΪ��Ҫ�����Ķ����������
143+
void LRDTree(CBTType treeNode){
144+
if(treeNode!=null){
145+
LRDTree(treeNode.left); //�������������
146+
LRDTree(treeNode.right); //�������������
147+
TreeNodeData(treeNode); //��ʾ�������
148+
}
149+
}
150+
151+
//�����������������ֱ�۶��ȱ����㷨����������һ�㼴����㣬�ٴ�����һ�����������������㣨��ε�ڶ��㣩
152+
//treeNodeΪ��Ҫ�����Ķ���������㡣����ɦ���ȴӸ���㿪ʼ����ÿ��Ľ��Ž����С�
153+
void LevelTree(CBTType treeNode){
154+
CBTType p;
155+
CBTType[] q=new CBTType[MAXLEN]; //�����һ��˳����У�ѭ�����У�
156+
int head=0,tail=0; //��ͷ��β��tailָ�������һ���ɴ����λ�á�
157+
158+
if(treeNode!=null){ //�������������
159+
160+
q[tail]=treeNode; //�������������ý����С���˼�ǣ���Ϊ�����ڣ����԰����Ž�һ������
161+
tail=(tail+1)%MAXLEN; //���Dz��κ�ָ�������ƶ�һ��λ�ã�������ת������ͷ��
162+
}
163+
while(head!=tail){
164+
p=q[head]; //��ȡ����Ԫ��
165+
TreeNodeData(p); //��������Ԫ��
166+
head=(head+1)%MAXLEN; //���ӵ�ɦ��ͷָ��ͼ�1�����κ�ָ�������ƶ�һ��λ�ã�������ת������ͷ��
167+
168+
if(p.left!=null){
169+
q[tail]=p.left; //����ý��������������������Ͱ����Ž����С�������������������С���ɦ��һ��ѭ���ǣ������������ڣ�ȡ��õ���ţ����ԷŽ������б��档
170+
tail=(tail+1)%MAXLEN; //������������������к�tail�������ƶ�����һ��ѭ��ɦ��˼���ǣ�ͷ���������������ڣ���tail+1��%MAXLENΪ2�����ڣ����Ե�һ�����������Ϊ���2
171+
172+
}
173+
if(p.right!=null){ //����ý������������������
174+
q[tail]=p.right; //������������������С���ɦ��һ��ѭ���ǣ������������ڣ�ȡ��õ���ţ����ԷŽ������б��档
175+
tail=(tail+1)%MAXLEN; //������������������к�tail�������ƶ�����һ��ѭ��ɦ��˼���ǣ�ͷ���������������ڣ���tail+1��%MAXLENΪ2�����ڣ����Ե�һ�����������Ϊ���3
176+
}
177+
}
178+
}
179+
180+
//��ѯ�����������
181+
int TreeDepth(CBTType treeNode){
182+
int depleft,depright;
183+
if(treeNode==null){
184+
return 0; //���ڿ��������Ϊ0
185+
}else{
186+
//����ʹ�õݹ飬�ǵݹ鵽���һ��ġ�Ȼ�������һ��������� ́��룬�ж�����Ⱥ�����ȡ����ŷ��ص������ڶ��㣬�اٴ�����������....��󵽵�һ�㣨����㣩
187+
//�������μݹ���̣��ȵݹ���������ȣ������һ�㣬Ȼ��ݹ�õ���������ȣ�������������󣬽��ž��DZ�������������������������ɦ��Ƚϸ߶�if(depleft>depright)��
188+
//Ȼ������������Ĵӵײ�����ص�����㣬����return��һ�����
189+
depleft=TreeDepth(treeNode.left); //��������ȣ��ݹ���ã�
190+
depright=TreeDepth(treeNode.right); //��������ȣ��ݹ���ã�
191+
//���߱������õ�������������������ȣ�Ȼ��ͱȽϸ߶�
192+
if(depleft>depright){
193+
return depleft+1;
194+
}else{
195+
return depright+1;
196+
}
197+
198+
199+
// if(depleft<depright){
200+
// return depright+1;
201+
// }else{
202+
// return depleft+1;
203+
// }
204+
}
205+
}
206+
//��ն�����������������ɿ�������
207+
//treeNode�Ǵ���յĶ������ĸ���㡣�������յݹ��������������������������ʹ�ø�ֵnull�������ͷŵ�ǰ�����ռ�ڴ档
208+
void ClearTree(CBTType treeNode){
209+
if(treeNode!=null){
210+
ClearTree(treeNode.left); //�ݹ������������������
211+
ClearTree(treeNode.right); //�ݹ������������������
212+
treeNode=null; //�ͷŵ�ǰ�����ռ�ڴ�
213+
}
214+
}
215+
216+
217+
public static void main(String[] args) {
218+
// TODO Auto-generated method stub
219+
CBTType root=null; //rootΪָ�����������������
220+
int menusel;
221+
TreeList t=new TreeList();
222+
root=t.InitTree(); //��ʼ��
223+
do{ //���ӽ��
224+
System.out.print("��ѡ��˵����Ӷ������Ľ��\n");
225+
System.out.print("0.�˳�\t"); //��ʾ�˵�
226+
System.out.print("1.���Ӷ��������\n");
227+
menusel=input.nextInt();
228+
switch(menusel){
229+
case 1:
230+
t.AddTreeNode(root); //���ӽ��
231+
break;
232+
case 0:
233+
break;
234+
default:
235+
;
236+
}
237+
}while(menusel!=0);
238+
239+
//����
240+
do{
241+
System.out.print("��ѡ��˵�����������������0��ʾ�˳���\n");
242+
System.out.print("1.�������DLR\t");
243+
System.out.print("2.�������LDR\t");
244+
System.out.print("3.�������LRD\t");
245+
System.out.print("4.�������\n");
246+
menusel=input.nextInt();
247+
switch(menusel){
248+
case 0:
249+
break;
250+
case 1: //�������
251+
System.out.print("\n�������DLR�Ľ����");
252+
t.DLRTree(root);
253+
System.out.print("\n");
254+
break;
255+
case 2: //�������
256+
System.out.print("\n����LDR�����Ľ����");
257+
t.LDRTree(root);
258+
System.out.print("\n");
259+
break;
260+
case 3:
261+
System.out.print("\n�������LRD�Ľ����");
262+
t.LRDTree(root);
263+
System.out.print("\n");
264+
break;
265+
case 4:
266+
System.out.print("\n��������Ľ���ǣ�");
267+
t.LevelTree(root);
268+
System.out.print("\n");
269+
break;
270+
default:
271+
;
272+
}
273+
}while(menusel!=0);
274+
//������
275+
System.out.printf("\n �����������%d\n",t.TreeDepth(root));
276+
277+
t.ClearTree(root);
278+
root=null;
279+
}
280+
}

‎基础知识/(5)树/树的遍历.txt

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
### ���ı����Ķ�����ʽ�����DZ���Ҫ���յģ������»�һһ������Ҫ������ʽ
2+
***
3+
### ��ʾ��㣺
4+
```
5+
void treeNodeData(Tree p){
6+
System.out.println("%s",p.data);
7+
}
8+
```
9+
### ���������
10+
```
11+
//������������ȷ��y����Ȼ����������������������������ڱ�����������ɦ����Ȼ�ȷ��y���㣬Ȼ������������������������������������Ϊ���򷵻ء����ݹ��˼·����������������
12+
//�����treeNodeΪ�Ҷ����������
13+
void DLRTree(CBTType treeNode){
14+
if(treeNode!=null){
15+
TreeNodeData(treeNode); //��ʾ��������
16+
DLRTree(treeNode.left); //���õݹ�˼�룡�������������������ñ������������˵ݹ���ھ����ڲ��ρ���ɦ��ֱ��һ���������Ϊ�ա�
17+
DLRTree(treeNode.right); //�ݹ�ǰ�����ǣ�һ��ʼ��������������㲻Ϊ�գ����������Ҳ��Ϊ�ա������Ϊ�գ��ͻ�����������滻������㡣
18+
}
19+
}
20+
```
21+
### �������
22+
```
23+
//�������:���ȱ�����������Ȼ����y���㣬���������������ڱ�����������ɦ����Ȼ�ȱ������������ۇٴ��y���㣬������������
24+
void LDRTree(CBTType treeNode){
25+
if(treeNode!=null){
26+
LDRTree(treeNode.left); //�������������
27+
TreeNodeData(treeNode); //��ʾ�������
28+
LDRTree(treeNode.right); //�������������
29+
}
30+
}
31+
```
32+
### ���������
33+
```
34+
//������������ȱ�����������Ȼ������������������y���㣬�ڱ�����������ɦ����Ȼ�ȱ�����������Ȼ�����������������������㡣
35+
// treeNodeΪ��Ҫ�����Ķ����������
36+
void LRDTree(CBTType treeNode){
37+
if(treeNode!=null){
38+
LRDTree(treeNode.left); //�������������
39+
LRDTree(treeNode.right); //�������������
40+
TreeNodeData(treeNode); //��ʾ�������
41+
}
42+
}
43+
```
44+
### ����������ֱ����˳�����IJ�����Լ���ʽ���IJ����
45+
#### ˳�����IJ����:
46+
```
47+
//�����������������ֱ�۶��ȱ����㷨����������һ�㼴����㣬�ٴ�����һ�����������������㣨��ε�ڶ��㣩
48+
//treeNodeΪ��Ҫ�����Ķ���������㡣����ɦ���ȴӸ���㿪ʼ����ÿ��Ľ��Ž����С�
49+
void LevelTree(CBTType treeNode){
50+
CBTType p;
51+
CBTType[] q=new CBTType[MAXLEN]; //�����һ��˳����У�ѭ�����У�
52+
int head=0,tail=0; //��ͷ��β��tailָ�������һ���ɴ����λ�á�
53+
54+
if(treeNode!=null){ //�������������
55+
56+
q[tail]=treeNode; //�������������ý����С���˼�ǣ���Ϊ�����ڣ����԰����Ž�һ������
57+
tail=(tail+1)%MAXLEN; //���Dz��κ�ָ�������ƶ�һ��λ�ã�������ת������ͷ��
58+
}
59+
while(head!=tail){
60+
p=q[head]; //��ȡ����Ԫ��
61+
TreeNodeData(p); //��������Ԫ��
62+
head=(head+1)%MAXLEN; //���ӵ�ɦ��ͷָ��ͼ�1�����κ�ָ�������ƶ�һ��λ�ã�������ת������ͷ��
63+
64+
if(p.left!=null){
65+
q[tail]=p.left; //����ý��������������������Ͱ����Ž����С�������������������С���ɦ��һ��ѭ���ǣ������������ڣ�ȡ��õ���ţ����ԷŽ������б��档
66+
tail=(tail+1)%MAXLEN; //������������������к�tail�������ƶ�����һ��ѭ��ɦ��˼���ǣ�ͷ���������������ڣ���tail+1��%MAXLENΪ2�����ڣ����Ե�һ�����������Ϊ���2
67+
68+
}
69+
if(p.right!=null){ //����ý������������������
70+
q[tail]=p.right; //������������������С���ɦ��һ��ѭ���ǣ������������ڣ�ȡ��õ���ţ����ԷŽ������б��档
71+
tail=(tail+1)%MAXLEN; //������������������к�tail�������ƶ�����һ��ѭ��ɦ��˼���ǣ�ͷ���������������ڣ���tail+1��%MAXLENΪ2�����ڣ����Ե�һ�����������Ϊ���3
72+
73+
}
74+
}
75+
}
76+
```
77+
### ��ʽ���IJ����:��Ϊʹ�õ���jdk�ṩ��һ�������࣬����һ���ӿ�List��ζ��������ʹ�ö�����ʽ��
78+
```
79+
public static void levelTree(Node node){
80+
if(node==null)return;
81+
Queue<Node> q=new LinkedList<Node>();
82+
q.add(node); //�����ڵ����
83+
while(!q.isEmpty()){
84+
Node temp = q.poll(); //���Ӷ�ͷԪ�ز�����
85+
System.out.println(temp.value);
86+
if(temp.left!=null)q.add(temp.left); //�����ǰ�ڵ����ڵ㲻Ϊ�����
87+
if(temp.right!=null)q.add(temp.right); //�����ǰ�ڵ���ҽڵ㲻Ϊ�գ����ҽڵ����
88+
}
89+
}
90+
```

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /