Python implements the cousin node of the binary tree
One uses the recursive method to
use the hash mapping code as follows
# 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
parent={
} #树的父节点
depth={
} #树的深度
def tree(root,par=None):
if root:
if par:
depth[root.val]=1+depth[par]
else:
depth[root.val]=1
parent[root.val]=par
tree(root.left,root.val)
tree(root.right,root.val)
tree(root)
return depth[x]==depth[y] and parent[x]!=parent[y]
Second, the iterative method is
adopted. The idea of hierarchical traversal is adopted. If two nodes are in the same layer and their parent nodes are different, then return True, otherwise return False
# 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
迭代
ls=[root]
while ls:
li=[]
ac=[]
for _ in range(len(ls)):
b=[]
a=ls.pop()
if a.right:
li.append(a.right)
ac.append(a.right.val)
b.append(a.right.val)
if a.left:
li.append(a.left)
ac.append(a.left.val)
b.append(a.left.val)
if b:
if x in b and y in b:
return False
if x in ac and y in ac and (x not in b or y not in b):
return True
ls=li
return False