2020-10-23Python implements the cousin node of the binary tree

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

Guess you like

Origin blog.csdn.net/qq_44671932/article/details/109248996