本文主要是介绍层序遍历,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 993. 二叉树的堂兄弟节点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!