Skip to content

Commit 822fe01

Browse files
authored
Create 二叉树之层次遍历.js
1 parent d15f696 commit 822fe01

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

二叉树之层次遍历.js

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
*
3+
* 输入:(11,LL)(7,LLL)(8,R)(5,)(4,L)(13,RL)(2,LLR)(1,RRR)(4,RR)
4+
* 输出:5 4 8 11 13 4 7 2 1
5+
* 思路:先建立一棵二叉树。再进行队列遍历。
6+
*
7+
*/
8+
function beTree(obj) {
9+
var obj = obj.split(')');
10+
var newobj = [];
11+
for (var i = 0; i < obj.length - 1; i++) {
12+
newobj.push(obj[i].replace('(',''));
13+
}
14+
var root = {
15+
value: null, left: null, right: null, child: false
16+
}
17+
var node;
18+
for(var i = 0; i < newobj.length; i++) {
19+
var [nodeVal, nodePos] = newobj[i].split(',');
20+
node = root;
21+
if(nodePos){
22+
for (var j = 0; j < nodePos.length; j++) {
23+
24+
if(nodePos[j].toUpperCase() === 'L'){
25+
if(node.left === null){
26+
node.left = newnode();
27+
node = node.left;
28+
}else {
29+
node = node.left;
30+
}
31+
} else if(nodePos[j].toUpperCase() === 'R') {
32+
if(node.right === null){
33+
node.right = newnode();
34+
node = node.right;
35+
}else{
36+
node = node.right;
37+
}
38+
}
39+
}
40+
if(!node.child) {
41+
node.value = nodeVal;
42+
node.child = true;
43+
}
44+
}else {
45+
root.value = nodeVal;
46+
node.child = true;
47+
}
48+
}
49+
return root;
50+
}
51+
function newnode() {
52+
return { value: null, left: null, right: null, child: false };
53+
}
54+
function bfs() {
55+
var root = beTree('(11,LL)(7,LLL)(8,R)(5,)(4,L)(13,RL)(2,LLR)(1,RRR)(4,RR)');
56+
var front = 0,next = 1,n = 0;
57+
var tree = [],ret = [];
58+
tree[0] = root;
59+
while(front < next) {
60+
var node = tree[front++];
61+
if(!node.child) {
62+
return;
63+
}
64+
ret[n++] = node.value;
65+
if(node.left !== null) {
66+
tree[next++] = node.left;
67+
}
68+
if(node.right !== null) {
69+
tree[next++] = node.right;
70+
}
71+
}
72+
console.log(ret.join(' '));
73+
}
74+
bfs();

0 commit comments

Comments
 (0)