12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- # 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 __init__(self):
- self.xPar = None
- self.xDepth = None
- self.yPar = None
- self.yDepth = None
-
- def isCousins(self, root: TreeNode, x: int, y: int) -> bool:
- # descend the binary tree and find the two values, set their parents
- # exit and then compare
- # because ints are unique and the nodes do exist there
- # shouldn't be too many edge cases I don't think
- self.descendTreeFinding(root, x, y, None, 0)
- return self.xDepth == self.yDepth and self.xPar != self.yPar
-
- def descendTreeFinding(self, tree, x, y, parent, depth):
- if tree is None:
- return
-
- if tree.val == x:
- self.xPar = parent
- self.xDepth = depth
-
- if tree.val == y:
- self.yPar = parent
- self.yDepth = depth
-
- if self.yPar is not None and self.xPar is not None:
- return
- else:
- self.descendTreeFinding(tree.left, x, y, tree.val, depth + 1)
- self.descendTreeFinding(tree.right, x, y, tree.val, depth + 1)
-
- s = Solution()
- print("Expected: true")
- tree = TreeNode(1)
- left = TreeNode(2)
- left.right = TreeNode(4)
- tree.left = left
- right = TreeNode(3)
- right.right = TreeNode(5)
- tree.right = right
-
- print("Got:", s.isCousins(tree, 4, 5))
|