1. N 叉树的前序遍历
如果熟悉二叉树的前序遍历,☞ 二叉树的前序遍历。N叉树也是一样的思路。只不过将左子树和右子树的递归访问改成了对chidren的递归访问。
function preorder(root: Node | null): number[] {
const res: number[] = []
function dfs(node: Node | null) {
if (node === null) return
// 前序的收集时机
res.push(node.val)
// 遍历children节点,递归收集
for (let i = 0; i < node.children.length; i++) {
dfs(node.children[i])
}
}
dfs(root)
return res
}
2. 翻转二叉树
给你一棵二叉树的根节点
root,翻转这棵二叉树,并返回其根节点。
思路:
翻转根节点的左右节点的位置,同时对左右子节点的子树也进行翻转。递归。
var invertTree = function(root) {
function dfs(node) {
// 空节点 或者 左右子树为空 就直接返回当前节点
if (node === null ||
(node && node.left === null && node.right === null)
) {
return node
}
// 调换node的左右节点的位置
let left = node.left
// 因为node.right的左右子树也需要翻转,递归翻转
node.left = dfs(node.right)
// node.left同理
node.right = dfs(left)
// 返回翻转之后的node
return node
}
dfs(root)
return root
};