2023-07-11 Daily Challenge

Today I have done leetcode's July LeetCoding Challenge with cpp.

July LeetCoding Challenge 11

Description

All Nodes Distance K in Binary Tree

Given the root of a binary tree, the value of a target node target, and an integer k, return an array of the values of all nodes that have a distance k from the target node.

You can return the answer in any order.

 

Example 1:

Input: root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, k = 2
Output: [7,4,1]
Explanation: The nodes that are a distance 2 from the target node (with value 5) have values 7, 4, and 1.

Example 2:

Input: root = [1], target = 1, k = 3
Output: []

 

Constraints:

  • The number of nodes in the tree is in the range [1, 500].
  • 0 <= Node.val <= 500
  • All the values Node.val are unique.
  • target is the value of one of the nodes in the tree.
  • 0 <= k <= 1000

Solution

class Solution {
  void buildGraph(TreeNode *root, vector<vector<int>> &neighbors) {
    int val = root->val;
    if(root->left) {
      neighbors[val].push_back(root->left->val);
      neighbors[root->left->val].push_back(val);
      buildGraph(root->left, neighbors);
    }
    if(root->right) {
      neighbors[val].push_back(root->right->val);
      neighbors[root->right->val].push_back(val);
      buildGraph(root->right, neighbors);
    }
  }
  void solve(
    int current,
    int parent,
    int k,
    vector<int> &answer,
    const vector<vector<int>> &neighbors
  ) {
    if(!k) {
      answer.push_back(current);
      return;
    }
    for(auto next : neighbors[current]) {
      if(parent == next) continue;
      solve(next, current, k - 1, answer, neighbors);
    }
  }
public:
  vector<int> distanceK(TreeNode* root, TreeNode* target, int k) {
    vector<vector<int>> neighbors(501);
    buildGraph(root, neighbors);
    vector<int> answer;
    solve(target->val, -1, k, answer, neighbors);
    return answer;
  }
};

// Accepted
// 57/57 cases passed (9 ms)
// Your runtime beats 38.57 % of cpp submissions
// Your memory usage beats 5.12 % of cpp submissions (16.9 MB)