863. All Nodes Distance K in Binary Tree

二叉树中所有距离为k的节点。

给定一个二叉树,一个目标节点,一个整数值k,返回到目标节点距离为k的所有节点的值的列表,答案可以以任何顺序返回。

由一个节点出发,使用dfs搜索所有距离为k的节点。由于输入的搜索二叉树没有记录父节点,dfs同时需要用哈希表记录每个节点的父节点。

  • 时间复杂度O(n)
  • 空间复杂度O(n)

\

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @param {TreeNode} target
 * @param {number} k
 * @return {number[]}
 */
var distanceK = function(root, target, k) {
  const map = new Map();
  const res = [];
  
  const findParent = function(node) {
    if (node.left) {
      map.set(node.left.val, node);
      findParent(node.left);
    }
    if (node.right) {
      map.set(node.right.val, node);
      findParent(node.right);
    }
  }
  
  const findK = function (node, from, depth, k) {
    if (!node) return;
    if (depth === k) {
      res.push(node.val);
      return;
    }
    if (node.left !== from) findK(node.left, node, depth + 1, k);
    if (node.right !== from) findK(node.right, node, depth + 1, k);
    if (map.get(node.val) !== from) findK(map.get(node.val), node, depth + 1, k);
  }
  
  findParent(root);
  findK(target, null, 0, k);
  return res;
};

你可能感兴趣的:(863. All Nodes Distance K in Binary Tree)