Home > Backend Development > PHP Tutorial > Height of Binary Tree After Subtree Removal Queries

Height of Binary Tree After Subtree Removal Queries

Barbara Streisand
Release: 2024-11-03 08:57:02
Original
280 people have browsed it

2458. Height of Binary Tree After Subtree Removal Queries

Difficulty: Hard

Topics: Array, Tree, Depth-First Search, Breadth-First Search, Binary Tree

You are given the root of a binary tree with n nodes. Each node is assigned a unique value from 1 to n. You are also given an array queries of size m.

You have to perform m independent queries on the tree where in the ith query you do the following:

  • Remove the subtree rooted at the node with the value queries[i] from the tree. It is guaranteed that queries[i] will not be equal to the value of the root.

Return an array answer of size m where answer[i] is the height of the tree after performing the ith query.

Note:

  • The queries are independent, so the tree returns to its initial state after each query.
  • The height of a tree is the number of edges in the longest simple path from the root to some node in the tree.

Example 1:

Height of Binary Tree After Subtree Removal Queries

  • Input: root = [1,3,4,2,null,6,5,null,null,null,null,null,7], queries = [4]
  • Output: [2]
  • Explanation: The diagram above shows the tree after removing the subtree rooted at node with value 4.
    • The height of the tree is 2 (The path 1 -> 3 -> 2).

Example 2:

Height of Binary Tree After Subtree Removal Queries

  • Input: root = [5,8,9,2,1,3,7,4,6], queries = [3,2,4,8]
  • Output: [3,2,3,2]
  • Explanation: We have the following queries:
    • Removing the subtree rooted at node with value 3. The height of the tree becomes 3 (The path 5 -> 8 -> 2 -> 4).
    • Removing the subtree rooted at node with value 2. The height of the tree becomes 2 (The path 5 -> 8 -> 1).
    • Removing the subtree rooted at node with value 4. The height of the tree becomes 3 (The path 5 -> 8 -> 2 -> 6).
    • Removing the subtree rooted at node with value 8. The height of the tree becomes 2 (The path 5 -> 9 -> 3).

Constraints:

  • The number of nodes in the tree is n.
  • 2 <= n <= 105
  • 1 <= Node.val <= n
  • All the values in the tree are unique.
  • m == queries.length
  • 1 <= m <= min(n, 104)
  • 1 <= queries[i] <= n
  • queries[i] != root.val

Hint:

  1. Try pre-computing the answer for each node from 1 to n, and answer each query in O(1).
  2. The answers can be precomputed in a single tree traversal after computing the height of each subtree.

Solution:

The solution employs a two-pass approach:

  1. Calculate the height of each node in the tree.
  2. Determine the maximum height of the tree after removing the subtree rooted at each queried node.

Let's implement this solution in PHP: 2458. Height of Binary Tree After Subtree Removal Queries

Code Breakdown

1. Class Definition and Properties:

class Solution {

    private $valToMaxHeight = [];
    private $valToHeight = [];
Copy after login
Copy after login
  • valToMaxHeight: This array will store the maximum height of the tree after removing each node's subtree.
  • valToHeight: This array will store the height of each node's subtree.

2. Main Function:

function treeQueries($root, $queries) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}
Copy after login
Copy after login
  • The function treeQueries takes the root of the tree and the queries array.
  • It first calls the height function to compute the height of each node.
  • Then, it calls the dfs (depth-first search) function to compute the maximum heights after subtree removals.
  • Finally, it populates the answer array with the results for each query.

3. Height Calculation:

private function height($node) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}
Copy after login
  • This function computes the height of each node recursively.
  • If the node is null, it returns 0.
  • If the height of the node is already computed, it retrieves it from the cache (valToHeight).
  • It calculates the height based on the heights of its left and right children and stores it in valToHeight.

4. Depth-First Search for Maximum Height:

private function dfs($node, $depth, $maxHeight) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}
Copy after login
  • This function performs a DFS to compute the maximum height of the tree after each node's subtree is removed.
  • It records the current maximum height in valToMaxHeight for the current node.
  • It calculates the heights of the left and right subtrees and updates the maximum height accordingly.
  • It recursively calls itself for the left and right children, updating the depth and maximum height.

Example Walkthrough

Let's go through an example step-by-step.

Example Input:

// Tree Structure
//        1
//       / \
//      3   4
//     /   / \
//    2   6   5
//         \
//          7

$root = [1, 3, 4, 2, null, 6, 5, null, null, null, null, null, 7];
$queries = [4];
Copy after login

Initial Height Calculation:

  • The height of the tree rooted at 1: 3
  • The height of the tree rooted at 3: 2
  • The height of the tree rooted at 4: 2 (height of subtrees rooted at 6 and 5)
  • The height of the tree rooted at 6: 1 (just node 7)
  • The height of the tree rooted at 2: 0 (leaf node)

After the height computation, valToHeight would look like this:

class Solution {

    private $valToMaxHeight = [];
    private $valToHeight = [];
Copy after login
Copy after login

DFS for Max Heights:

  • For the root (1), removing subtree 4 leaves:
    • Left Height: 2 (rooted at 3)
    • Right Height: 1 (rooted at 5)
  • Thus, the maximum height after removing 4 is 2.

Result Array After Queries:

  • For the query 4, the result would be [2].

Final Output

The result for the input provided will be:

function treeQueries($root, $queries) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}
Copy after login
Copy after login

This structured approach ensures that we efficiently compute the necessary heights and answer each query in constant time after the initial preprocessing. The overall complexity is O(n m), where n is the number of nodes in the tree and m is the number of queries.

Contact Links

If you found this series helpful, please consider giving the repository a star on GitHub or sharing the post on your favorite social networks ?. Your support would mean a lot to me!

If you want more helpful content like this, feel free to follow me:

  • LinkedIn
  • GitHub

The above is the detailed content of Height of Binary Tree After Subtree Removal Queries. For more information, please follow other related articles on the PHP Chinese website!

source:dev.to
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template