树的遍历 BFS DFS
对于树的两种遍历方式
BFS:使用队列来控制
DFS:递归来控制,需要注意return条件即可
BFS
var connect = function (root) {
// BFS
if (!root) return root
let queue = [root]
while (queue.length) {
let size = queue.length
for (let i = 0; i < size; ++i) {
let node = queue.shift()
// 非最后的节点,直接将其指向下一个节点
if (i < size - 1) node.next = queue[0]
// 左右子树入队
if (node.left) queue.push(node.left)
if (node.right) queue.push(node.right)
}
}
return root
};
DFS
// DFS
var connect = function (root) {
if (!root) return root
var travers = function (node1, node2) {
if (!node1 && !node2) return
node1.next = node2
travers(node1.left, node1.right)
travers(node2.left, node2.right)
// 衔接不同根节点的相邻叶子结点
travers(node1.right, node2.left)
}
travers(root.left, root.right)
return root
};