leetcode算法---深度優先遍歷系列(一)---------872.葉子相似的樹

題目描述

tree

 

舉個例子,如上圖所示,給定一顆葉值序列爲 (6, 7, 4, 9, 8) 的樹。

如果有兩顆二叉樹的葉值序列是相同,那麼我們就認爲它們是 葉相似 的。

如果給定的兩個頭結點分別爲 root1 和 root2 的樹是葉相似的,則返回 true;否則返回 false 。

 

提示:

給定的兩顆樹可能會有 1 到 200 個結點。
給定的兩顆樹上的值介於 0 到 200 之間。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/leaf-similar-trees
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

 

題目解析

一種可行的解法通過深度優先遍歷生成2棵樹的葉子序列然後進行比較。

但是這樣,在葉子序列不一致時比較低效,可能很早的葉子就不同了。因此使用python中的生成器來實現。

 

代碼實現

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

import itertools

class Solution:
    def leafSimilar(self, root1: TreeNode, root2: TreeNode) -> bool:
        def get_next_leaf(root):
            if root is None:
                return

            if root.left is None and root.right is None:
                yield root
            
            yield from get_next_leaf(root.left)
            yield from get_next_leaf(root.right)

        if root1 is None:
            return root2 is None
        
        if root2 is None:
            return root1 is None

        leafs1 = get_next_leaf(root1)
        leafs2 = get_next_leaf(root2)
        leafs = itertools.zip_longest(leafs1, leafs2)
        for leaf1, leaf2 in leafs:
            if leaf1 is None:
                return leaf2 is None
            
            if leaf2 is None:
                return leaf1 is None

            if leaf1.val != leaf2.val:
                return False

        return True
                

 

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