一日一练

105 阅读1分钟

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
};