【力扣】993:二叉樹的堂兄弟節點 | BFS

題目描述

在二叉樹中,根節點位於深度 0 處,每個深度爲 k 的節點的子節點位於深度 k+1 處。

如果二叉樹的兩個節點深度相同但父節點不同,則它們是一對堂兄弟節點。

我們給出了具有唯一值的二叉樹的根節點 root,以及樹中兩個不同節點的值 x 和 y。

只有與值 x 和 y 對應的節點是堂兄弟節點時,才返回 true。否則,返回 false。

來源:力扣(LeetCode)

算法思路

深度相同:廣度優先搜索
父節點不同:編號

class Solution:
    def isCousins(self, root: TreeNode, x: int, y: int) -> bool:
        ls=[root]
        while ls:
            k={}
            v=0
            for i in range(len(ls)):
                r=ls.pop(0)
                if r.left:
                    ls.append(r.left)
                    k[r.left.val]=v
                v+=1
                if r.right:
                    ls.append(r.right)
                    k[r.right.val]=v
                v+=1
            if x in k and y in k:
                if k[x]%2 and k[x]-k[y]!=1:
                    return True
                elif k[y]%2 and k[y]-k[x]!=1:
                    return True
                elif abs(k[y]-k[x])>1:
                    return  True
        return False

執行用時 :44 ms, 在所有 Python3 提交中擊敗了48.97%的用戶
內存消耗 :13.6 MB, 在所有 Python3 提交中擊敗了100.00%的用戶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章