Skip to content

Commit 4aecbb1

Browse files
committed
算法练习
1 parent 8df035f commit 4aecbb1

6 files changed

Lines changed: 422 additions & 2 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
- java 算法部分学习笔记
5959
<ul><p> <a href="https://github.com/mood321/JavaDemo/blob/master/src/main/resources/note/Algorithm/算法学习笔记.md">算法部分学习笔记</a>
6060
<li><p> <a href="https://github.com/mood321/JavaDemo/blob/master/src/main/resources/note/Algorithm/算法学习基本数据结构和算法原型.md">算法学习基本数据结构和算法原型</a>
61-
<li> <p> <a href="https://github.com/mood321/JavaDemo/blob/master/src/main/resources/note/Algorithm/数据结构相关概念和基本数据结构及部分算法原型.md">数据结构相关概念和基本数据结构及部分算法原型</a>
61+
<li> <p> <a href="https://github.com/mood321/JavaDemo/blob/master/src/main/resources/note/Algorithm/数据结构与算法之美.md">数据结构与算法之美</a>
6262
6363
6464

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package algorithm.basic04;
2+
3+
/**
4+
* @Created by mood321
5+
* @Date 2019/11/4 0004
6+
* @Description TODO
7+
*/
8+
public class Code_02_PrintBinaryTree {
9+
10+
public static class Node {
11+
public int value;
12+
public Node left;
13+
public Node right;
14+
15+
public Node(int data) {
16+
this.value = data;
17+
}
18+
}
19+
20+
public static void printTree(Node head) {
21+
System.out.println("Binary Tree:");
22+
printInOrder(head, 0, "H", 17);
23+
System.out.println();
24+
}
25+
26+
public static void printInOrder(Node head, int height, String to, int len) {
27+
if (head == null) {
28+
return;
29+
}
30+
printInOrder(head.right, height + 1, "v", len);
31+
String val = to + head.value + to;
32+
int lenM = val.length();
33+
int lenL = (len - lenM) / 2;
34+
int lenR = len - lenM - lenL;
35+
val = getSpace(lenL) + val + getSpace(lenR);
36+
System.out.println(getSpace(height * len) + val);
37+
printInOrder(head.left, height + 1, "^", len);
38+
}
39+
40+
public static String getSpace(int num) {
41+
String space = " ";
42+
StringBuffer buf = new StringBuffer("");
43+
for (int i = 0; i < num; i++) {
44+
buf.append(space);
45+
}
46+
return buf.toString();
47+
}
48+
49+
public static void main(String[] args) {
50+
Node head = new Node(1);
51+
head.left = new Node(-222222222);
52+
head.right = new Node(3);
53+
head.left.left = new Node(Integer.MIN_VALUE);
54+
head.right.left = new Node(55555555);
55+
head.right.right = new Node(66);
56+
head.left.left.right = new Node(777);
57+
printTree(head);
58+
59+
head = new Node(1);
60+
head.left = new Node(2);
61+
head.right = new Node(3);
62+
head.left.left = new Node(4);
63+
head.right.left = new Node(5);
64+
head.right.right = new Node(6);
65+
head.left.left.right = new Node(7);
66+
printTree(head);
67+
68+
head = new Node(1);
69+
head.left = new Node(1);
70+
head.right = new Node(1);
71+
head.left.left = new Node(1);
72+
head.right.left = new Node(1);
73+
head.right.right = new Node(1);
74+
head.left.left.right = new Node(1);
75+
printTree(head);
76+
77+
}
78+
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package algorithm.basic04;
2+
3+
/**
4+
* @Created by mood321
5+
* @Date 2019/11/4 0004
6+
* @Description TODO
7+
*/
8+
public class Code_03_SuccessorNode {
9+
public static class Node {
10+
public int value;
11+
public Node left;
12+
public Node right;
13+
public Node parent;
14+
15+
public Node(int data) {
16+
this.value = data;
17+
}
18+
}
19+
20+
public static void main(String[] args) {
21+
Node head = new Node(6);
22+
head.parent = null;
23+
head.left = new Node(3);
24+
head.left.parent = head;
25+
head.left.left = new Node(1);
26+
head.left.left.parent = head.left;
27+
head.left.left.right = new Node(2);
28+
head.left.left.right.parent = head.left.left;
29+
head.left.right = new Node(4);
30+
head.left.right.parent = head.left;
31+
head.left.right.right = new Node(5);
32+
head.left.right.right.parent = head.left.right;
33+
head.right = new Node(9);
34+
head.right.parent = head;
35+
head.right.left = new Node(8);
36+
head.right.left.parent = head.right;
37+
head.right.left.left = new Node(7);
38+
head.right.left.left.parent = head.right.left;
39+
head.right.right = new Node(10);
40+
head.right.right.parent = head.right;
41+
42+
Node test = head.left.left;
43+
System.out.println(test.value + " next: " + getSuccessorNode(test).value);
44+
test = head.left.left.right;
45+
System.out.println(test.value + " next: " + getSuccessorNode(test).value);
46+
test = head.left;
47+
System.out.println(test.value + " next: " + getSuccessorNode(test).value);
48+
test = head.left.right;
49+
System.out.println(test.value + " next: " + getSuccessorNode(test).value);
50+
test = head.left.right.right;
51+
System.out.println(test.value + " next: " + getSuccessorNode(test).value);
52+
test = head;
53+
System.out.println(test.value + " next: " + getSuccessorNode(test).value);
54+
test = head.right.left.left;
55+
System.out.println(test.value + " next: " + getSuccessorNode(test).value);
56+
test = head.right.left;
57+
System.out.println(test.value + " next: " + getSuccessorNode(test).value);
58+
test = head.right;
59+
System.out.println(test.value + " next: " + getSuccessorNode(test).value);
60+
test = head.right.right; // 10's next is null
61+
System.out.println(test.value + " next: " + getSuccessorNode(test));
62+
}
63+
64+
private static Node getSuccessorNode(Node test) {
65+
if (test == null) {
66+
return test;
67+
}
68+
if (test.right != null) {
69+
return getLeftMost(test.right);
70+
}
71+
Node par=test.parent;
72+
while(par!=null){
73+
if(par.left==test){
74+
return par;
75+
}
76+
par=par.parent;
77+
test=test.parent;
78+
}
79+
return null;
80+
}
81+
82+
private static Node getLeftMost(Node right) {
83+
if (right == null) {
84+
return right;
85+
}
86+
while (right.left != null) {
87+
right = right.left;
88+
}
89+
return right;
90+
}
91+
92+
93+
}

0 commit comments

Comments
 (0)