难度简单121收藏分享切换为英文接收动态反馈
在二叉树中,根节点位于深度 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.BFS:层次遍历,遇到左右孩子符合的直接False else最终判断在不在层次遍历数组
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isCousins(self, root: TreeNode, x: int, y: int) -> bool:
if not root:
return False
cur = [root]
res =[]
while cur:
temp = []
next_layer = []
for node in cur:
temp.append(node.val)
if node.left and node.right:
if (node.left.val == x and node.right.val==y)or (node.left.val == y and node.right.val==x):
return False
if node.left:
next_layer.append(node.left)
if node.right:
next_layer.append(node.right)
cur = next_layer
res.append(temp)
for i in res:
if x in i and y in i :
return True
return False
1.DFS:记录当前的父节点和深度,递归遍历
方法:标记父节点与深度
思路
当且仅当一对节点深度相同而父节点不相同时,它们是堂兄弟节点。一种非常直接的方法就是通过某种方法求出每一个节点的深度与父节点。
算法
我们用深度优先搜索标记每一个节点,对于每一个节点 node,它的父亲为 par,深度为 d,我们将其记录到 Hashmap 中:parent[node.val] = par 且 depth[node.val] = d。
作者:LeetCode
链接:https://leetcode-cn.com/problems/cousins-in-binary-tree/solution/er-cha-shu-de-tang-xiong-di-jie-dian-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
作者:LeetCode
链接:https://leetcode-cn.com/problems/cousins-in-binary-tree/solution/er-cha-shu-de-tang-xiong-di-jie-dian-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
、