深度遍历(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)