Leedcode-二叉搜尋樹中的眾數

Junior_bond發表於2024-05-19

自己寫的:

class Solution:
    # findMode方法接受一個二叉樹的根節點root,並返回一個列表,其中包含樹中出現次數最多的值
    def findMode(self, root: Optional[TreeNode]) -> List[int]:
        # 初始化一個佇列,用於層次遍歷二叉樹
        queue = [root]
        # 初始化一個字典save_dict,用於儲存每個節點值出現的次數
        save_dict = {}

        # 進行層次遍歷,直到佇列為空
        while queue:
            # 從佇列中彈出當前節點
            cur = queue.pop()
            # 如果當前節點的值不在save_dict中,則將其新增進去,並設定計數為1
            if not save_dict.get(cur.val):
                save_dict[cur.val] = 1
            # 如果當前節點的值已經在save_dict中,則增加其計數
            else:
                save_dict[cur.val] += 1

            # 如果當前節點有左子節點,則將其新增到佇列中
            if cur.left:
                queue.append(cur.left)
            # 如果當前節點有右子節點,則將其新增到佇列中
            if cur.right:
                queue.append(cur.right)

        # 初始化一個列表res,用於儲存出現次數最多的值
        res = []

        # 使用max函式找出save_dict中出現次數最多的值
        maxValue = max(save_dict.values())

        # 遍歷save_dict中的所有鍵值對
        for k, v in save_dict.items():
            # 如果某個值的出現次數等於maxValue,則將其新增到res列表中
            if v == maxValue:
                res.append(k)

        # 返回包含出現次數最多的值的列表
        return res

相關文章