zoukankan      html  css  js  c++  java
  • LeetCode 993. Cousins in Binary Tree(判断结点是否为Cousin)

    993. Cousins in Binary Tree

    In a binary tree, the root node is at depth 0, and children of each depth knode 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 yare 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

    思路:

    求解x,y的深度和父亲结点,如果深度一样,父亲结点不同,就是true;否则,就是false。

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        TreeNode *getDepth(TreeNode* root, int val, int depth, int &level)
        {
            if (!root) return nullptr;
            
            //找到val的父亲,并设置val的depth
            if ((root->left && root->left->val == val) || (root->right && root->right->val == val))
            {
                level = depth;
                return root;
            }
    
            TreeNode *left = getDepth(root->left, val, depth + 1, level);
            if (left) return left;
    
            TreeNode *right = getDepth(root->right, val, depth + 1, level);
            if (right) return right;
    
            return nullptr;
        }
    
        bool isCousins(TreeNode *root, int x, int y)
        {
            int x_depth = -1, y_depth = -1;
            TreeNode *x_parent = getDepth(root, x, 0, x_depth);
            TreeNode *y_parent = getDepth(root, y, 0, y_depth);
            if (x_depth == y_depth  && x_parent != y_parent)
            {
                return true;
            }
            return false;
        }
    };

  • 相关阅读:
    codeforces 707D-(DFS+bitset)
    codeforces Educational Codeforces Round 16-E(DP)
    codeforces 597C (树状数组+DP)
    codeforces #round363 div2.C-Vacations (DP)
    Codeforces Round #365 (Div. 2)-D Mishka and Interesting sum(树状数组)
    codeforces round367 div2.C (DP)
    June Challenge 2018 Division 2
    Codeforces Round #487 (Div. 2)
    Educational Codeforces Round 45 (Rated for Div. 2)
    [Offer收割]编程练习赛63
  • 原文地址:https://www.cnblogs.com/douzujun/p/10922786.html
Copyright © 2011-2022 走看看