993. Cousins in Binary Tree

Source code notebook Author Update time

In a binary tree, the root node is at depth 0, and children of each depth k node are at depth k+1.

Two nodes of a binary tree are cousins if they have the same depth, but have different parents.

We are given the root of a binary tree with unique values, and the values x and y of two different nodes in the tree.

Return true if and only if the nodes corresponding to the values x and y are cousins.

Example 1:

Input: root = [1,2,3,4], x = 4, y = 3
Output: false

Example 2:

Input: root = [1,2,3,null,4,null,5], x = 5, y = 4
Output: true

Example 3:

Input: root = [1,2,3,null,4], x = 2, y = 3
Output: false

Constraints:

  • The number of nodes in the tree will be between 2 and 100.
  • Each node has a unique integer value from 1 to 100.
# @lc code=start
using LeetCode

function is_cousins(root::TreeNode{Int}, x, y)
    q = NTuple{2, Union{Nothing, TreeNode}}[]
    push!(q, (root, nothing))
    while !isempty(q)
        n = length(q)
        rec_parent = TreeNode{Int}[]
        for i in 1:n
            cur, par = popfirst!(q)
            if cur.val == x || cur.val == y
                push!(rec_parent, par)
            end
            isnothing(cur.left) || push!(q, (cur.left, cur))
            isnothing(cur.right) || push!(q, (cur.right, cur))
        end
        length(rec_parent) == 0 && continue
        length(rec_parent) == 1 && return false
        length(rec_parent) == 2 && return rec_parent[1] != rec_parent[2]
    end
end
# @lc code=end
is_cousins (generic function with 1 method)

This page was generated using DemoCards.jl and Literate.jl.