993. 二叉树的堂兄弟节点(BFS)
2022/5/2 6:13:03
本文主要是介绍993. 二叉树的堂兄弟节点(BFS),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
993. 二叉树的堂兄弟节点
在二叉树中,根节点位于深度 0
处,每个深度为 k
的节点的子节点位于深度 k+1
处。
如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。
我们给出了具有唯一值的二叉树的根节点 root
,以及树中两个不同节点的值 x
和 y
。
只有与值 x
和 y
对应的节点是堂兄弟节点时,才返回 true
。否则,返回 false
。
示例 1:
输入:root = [1,2,3,4], x = 4, y = 3 输出:false
示例 2:
输入:root = [1,2,3,null,4,null,5], x = 5, y = 4 输出:true
示例 3:
输入:root = [1,2,3,null,4], x = 2, y = 3 输出:false
提示:
- 二叉树的节点数介于
2
到100
之间。 - 每个节点的值都是唯一的、范围为
1
到100
的整数。
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode() : val(0), left(nullptr), right(nullptr) {} 8 * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} 9 * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} 10 * }; 11 */ 12 class Solution { 13 public: 14 unordered_map<int, std::pair<int, TreeNode*>> hashMap; // key->节点值, value->(深度,父节点) 15 bool isCousins(TreeNode* root, int x, int y) { 16 if (root == nullptr) { 17 return false; 18 } 19 queue<TreeNode *> q; 20 q.push(root); 21 hashMap[root->val].first = 0; 22 hashMap[root->val].second = root; 23 int step = 0; 24 while (!q.empty()) { 25 int size = q.size(); 26 step++; 27 for (int i = 0; i < size; i++) { 28 TreeNode *curNode = q.front(); 29 q.pop(); 30 if (curNode == nullptr) { 31 continue; 32 } 33 if (curNode->left != nullptr) { 34 q.push(curNode->left); 35 hashMap[curNode->left->val].first = step; 36 hashMap[curNode->left->val].second = curNode; 37 } 38 if (curNode->right != nullptr) { 39 q.push(curNode->right); 40 hashMap[curNode->right->val].first = step; 41 hashMap[curNode->right->val].second = curNode; 42 } 43 } 44 } 45 auto xInfo = hashMap.find(x); 46 auto yInfo = hashMap.find(y); 47 // x或者y的深度和父节点不存在,则返回false 48 if (xInfo == hashMap.end() || yInfo == hashMap.end()) { 49 return false; 50 } 51 // 只有x和y的深度、父节点均存在,且x和y深度相同,x和y的父节点不同时才返回true 52 if (xInfo->second.first == yInfo->second.first && 53 xInfo->second.second != yInfo->second.second) { 54 return true; 55 } 56 return false; 57 } 58 };
这篇关于993. 二叉树的堂兄弟节点(BFS)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程
- 2024-11-26Springboot单体架构搭建资料详解与实战教程
- 2024-11-26Springboot框架资料:新手入门教程
- 2024-11-26Springboot企业级开发资料入门教程
- 2024-11-26SpringBoot企业级开发资料详解与实战教程
- 2024-11-26Springboot微服务资料:新手入门全攻略