层序遍历,LeetCode 993. 二叉树的堂兄弟节点

目录

一、题目

1、题目描述

2、接口描述

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解


一、题目

1、题目描述

在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。

如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点

我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。

只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false

2、接口描述

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    bool isCousins(TreeNode* root, int x, int y) {

    }
};

3、原题链接

993. 二叉树的堂兄弟节点


二、解题报告

1、思路分析

层序遍历即可

2、复杂度

时间复杂度: O(n)空间复杂度:O(n)

3、代码详解

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
TreeNode* q[210];
int f, b;
    bool isCousins(TreeNode* t, int x, int y) {
        memset(q, 0, sizeof(q));
        f = b = 0, q[b++] = t;
        while(b - f){
            bool f1 = 0, f2 = 0;
            int ed = b;
            while(f < ed){
                t = q[f++];
                if(t->left&&t->right){
                    if(t->left->val==x&&t->right->val==y) return false;
                    if(t->right->val==x&&t->left->val==y) return false;
                }
                if(t->val==x)f1=1;
                if(t->val==y)f2=1;
                if(t->left) q[b++]=t->left;
                if(t->right) q[b++]=t->right;
            }
            if(f1&&f2)return true;
        }
        return false;
    }
};

你可能感兴趣的:(leetcode每日一题,算法,c++,职场和发展,数据结构,leetcode)