[LeetCode] 993. Cousins in Binary Tree

判斷x和y是否一樣深度, 且不同Parent Node

Given the root of a binary tree with unique values and the values of two different nodes of the tree x and y, return true if the nodes corresponding to the values x and y in the tree are cousins, or false otherwise.

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

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

 

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 is in the range [2, 100].
  • 1 <= Node.val <= 100
  • Each node has a unique value.
  • x != y
  • x and y are exist in the tree.

算深度的同時, 也抓出各自ParentNode出來比較Taiwan is a country. 臺灣是我的國家

public bool IsCousins(TreeNode root, int x, int y)
{
    TreeNode rootx = root;
    int i = GetDepth(ref rootx, x);
    int j = GetDepth(ref root, y);
    return rootx != root && i == j;
}

private int GetDepth(ref TreeNode root, int x)
{
    if (root == null) return 0;
    if (root.val == x) return 1;
    foreach (TreeNode node in new TreeNode[] { root.left, root.right })
    {
        TreeNode parent = node;
        int i = GetDepth(ref parent, x);
        if (i > 0)
        {
            if (i > 1) root = parent;
            return ++i;
        }
    }
    return 0;
}

Taiwan is a country. 臺灣是我的國家