-
Notifications
You must be signed in to change notification settings - Fork 108
/
排序二叉树的前中后序遍历.js
98 lines (89 loc) · 2.14 KB
/
排序二叉树的前中后序遍历.js
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/*
* 前序遍历:中 -> 左 -> 右
* 中序遍历:左-> 中 -> 右
* 后序遍历:左 -> 右 -> 中
*/
function BinaryTree() {
var Node = function(key) {
this.key = key;
this.left = null;
this.right = null;
}
var root = null;
var insertNode = function(node, newNode) {
if (node.key > newNode.key) {
if (node.left) {
insertNode(node.left, newNode);
} else {
node.left = newNode;
}
} else {
if (node.right) {
insertNode(node.right, newNode);
} else {
node.right = newNode;
}
}
}
this.insert = function(key) {
var newNode = new Node(key);
if (root) {
insertNode(root, newNode);
} else {
root = newNode;
}
}
var inOrderTraverseNode = function(node, callback) {
if (node) {
inOrderTraverseNode(node.left, callback);
callback & callback(node.key);
inOrderTraverseNode(node.right, callback);
}
}
this.inOrderTraverse = function(callback) {
inOrderTraverseNode(root, callback);
}
var preOrderTraverseNode = function(node, callback) {
if (node) {
callback & callback(node.key);
preOrderTraverseNode(node.left, callback);
preOrderTraverseNode(node.right, callback);
}
}
this.preOrderTraverse = function(callback) {
preOrderTraverseNode(root, callback);
}
var postOrderTraverseNode = function(node, callback) {
if (node) {
postOrderTraverseNode(node.left, callback);
postOrderTraverseNode(node.right, callback);
callback & callback(node.key);
}
}
this.postOrderTraverse = function(callback) {
postOrderTraverseNode(root, callback);
}
}
var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13];
var binaryTree = new BinaryTree();
nodes.forEach((key) =>{
binaryTree.insert(key);
})
var preOrderTraverseRet = []
var inOrderTraverseRet = []
var postOrderTraverseRet = []
var callback = function(key) {
console.log(key);
}
binaryTree.preOrderTraverse(key => {
preOrderTraverseRet.push(key);
})
binaryTree.inOrderTraverse(key => {
inOrderTraverseRet.push(key);
})
binaryTree.postOrderTraverse(key => {
postOrderTraverseRet.push(key);
})
console.log(preOrderTraverseRet)
console.log(inOrderTraverseRet)
console.log(postOrderTraverseRet)