常规的三种遍历
(bt均为树的根节点, 创建好树的时候返回的是根节点,类似链表头指针)
- 先、中、后序遍历: 主要使用递归算法
// 先序遍历
function preOrder(bt) {
if (!bt) {
return;
}
console.log(bt.data);
preOrder(bt.left);
preOrder(bt.right);
}
// 中序遍历
function inOrder(bt) {
if (!bt) {
return;
}
inOrder(bt.left);
console.log(bt.data);
inOrder(bt.right);
}
// 后序遍历
function postOrder(bt) {
if (!bt) {
return;
}
postOrder(bt.left);
postOrder(bt.right);
console.log(bt.data);
}
dfs 和 bfs
- dfs
// dfs递归
function dfs(bt) {
if (!bt) {
return;
}
if (bt) {
res.push(bt.data);
dfs(bt.left);
dfs(bt.right);
}
return res;
}
// dfs非递归(利用栈-数组)
function dfss(bt) {
let stack = [];
let res = [];
while (bt || stack.length > 0) {
if (bt) {
stack.push(bt);
res.push(bt.data);
bt = bt.left;
} else {
bt = stack.pop();
bt = bt.right;
}
}
return res;
}
- bfs
// bfs - 层次遍历
function bfs(bt) {
let queue = [];
let res = [];
queue.push(bt);
while (queue.length) {
let cur = queue.shift();
res.push(cur);
cur.left && queue.push(cur.left);
cur.right && queue.push(cur.right);
}
return res;
}