深度遍历(DFS)
// 递归的方式
function DFS(root) {
let res = []
if (root === null) return []
root.left && res.push(...DFS(root.left))
root.right && res.push(...DFS(root.right))
return res
}
// 非递归方式
function DFS(root) {
if (root === null) return []
var res = []
var stack = []
stack.push(root);
while(stack.length) {
var item = stack.pop();
res.push(item)
if (item.left) stack.push(item.right) // 先放右边再放左边,这样一会pop会先出left
if (item.left) stack.push(item.left) //
}
return res
}
广度遍历(BFS)
let result = [];
let stack = [tree]; // 先将要遍历的树压入栈
let count = 0; // 用来记录执行到第一层
function bfs (root) {
let node = stack[count]
if (node) {
result.push(node)
if(node.left) stack.push(node.left);
if(node.right) stack.push(node.right);
count++
bfs()
}
}
bfs();
// 非递归写法
function bfs(node) {
let res = []
let queue = [node]
let point = 0
while (point < queue.length) {
let item = queue[point++]
res.push(item)
if (item.left) queue.push(item)
if (item.right) queue.push(item)
}
return res
}
bfs(tree)