forked from kexun/sort
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTree2DLink.java
72 lines (57 loc) · 1.27 KB
/
Tree2DLink.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.demo;
/**
* 二叉树转双向链表
* 利用中序的性质。
* @author kexun
*
*/
public class Tree2DLink {
public static void main(String[] args) {
DNode d1 = new DNode(6);
DNode d2 = new DNode(4);
DNode d3 = new DNode(2);
DNode d4 = new DNode(5);
DNode d5 = new DNode(1);
DNode d6 = new DNode(3);
DNode d7 = new DNode(7);
DNode d8 = new DNode(9);
DNode d9 = new DNode(8);
d1.pre = d2;
d1.next = d7;
d2.pre = d3;
d2.next = d4;
d3.pre = d5;
d3.next = d6;
d7.next = d8;
d8.pre = d9;
Tree2DLink t = new Tree2DLink();
DNode head = new DNode(0);
t.convert(d1, head);
while (head != null) {
System.out.println(head.data);
head = head.next;
}
}
public DNode convert(DNode tree, DNode head) {
if (tree == null) {
return null;
}
DNode left = convert(tree.pre, head);
DNode right = convert(tree.next, head);
DNode node = new DNode(tree.data);
if (left != null) {
DNode temp = left.next != null ? left.next : left;
temp.next = node;
node.pre = temp;
}
if (right != null) {
DNode temp = right.pre != null ? right.pre : right;
node.next = temp;
temp.pre = node;
}
if (left == null && right == null && head.next == null) {
head.next = node;
}
return node;
}
}