程式碼隨想錄演算法訓練營第十四天|leetcode226. 翻轉二叉樹、leetcode101.對稱二叉樹、leetcode104.二叉樹的最大深度、leetcode111.二叉樹的最小深度

小方呀0524發表於2024-10-31

1 leetcode226. 翻轉二叉樹

題目連結:226. 翻轉二叉樹 - 力扣(LeetCode)

文章連結:程式碼隨想錄

影片連結:聽說一位巨佬面Google被拒了,因為沒寫出翻轉二叉樹 | LeetCode:226.翻轉二叉樹_嗶哩嗶哩_bilibili

自己的思路:之前想過就是使用層序遍歷的方法來做這一道題目,後來感覺有一些行不通,就沒去嘗試,直接看影片,加看別人的程式碼做的,然後有一種自己很蠢的感覺

1.1 影片後的程式碼實現

就是左右位置交換進行儲存即可

# 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 invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        if root == None:
            return None
        root.left,root.right = root.right,root.left
        self.invertTree(root.left)
        self.invertTree(root.right)
        return root

1.2 小結

  1. 主要就是一個思路吧,遇到中間節點進行儲存,然後左右節點的位置進行交換,感覺遞迴我好像在這裡第一次理解

2 leetCode101.對稱二叉樹

題目連結:101. 對稱二叉樹 - 力扣(LeetCode)

文章連結:程式碼隨想錄

影片連結:新學期要從學習二叉樹開始! | LeetCode:101. 對稱二叉樹_嗶哩嗶哩_bilibili

自己的思路:之前想過就是使用層序遍歷的方法來做這一道題目,後來感覺有一些行不通,就沒去嘗試,直接看影片,加看別人的程式碼做的,然後有一種自己很蠢的感覺

2.1 看影片後做的方法

思路

  1. 分析問題,這個題目是對稱二叉樹,首先考慮遞迴裡面的內容,那麼進入的是什麼序列呢,就是後序排序
  2. 確定排序以後,然後判斷哪些資料是需要返回的,分析出四種情況,然後再對資料進行迭代,迭代選擇的時候,就是看比較的資料是什麼,我們比較是不是對稱,然後就是由外向內比較
  3. 最後就是迭代,返回比較的兩個值相不相同
  4. 函式呼叫
# 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 isSymmetric(self, root: Optional[TreeNode]) -> bool:
        if root == None:
            return True
        return self.compare(root.left,root.right)
    def compare(self,left,right):
        if left==None and right !=None:
            return False
        elif left!=None and right == None:
            return False
        elif left==None and right == None:
            return True
        elif left.val != right.val:
            return False
        outside = self.compare(left.left,right.right)
        inside = self.compare(left.right,right.left)
        same = outside and inside
        return same

2.2 小結

  1. 這道題有一種,會了以後自己好傻,不會的時候,這是啥的感覺

3 LeetCode104.二叉樹的最大深度

題目連結:104. 二叉樹的最大深度 - 力扣(LeetCode)

文章連結:程式碼隨想錄

影片連結:二叉樹的高度和深度有啥區別?究竟用什麼遍歷順序?很多錄友搞不懂 | LeetCode:104.二叉樹的最大深度_嗶哩嗶哩_bilibili

自己的思路:一點思路,使用前序遍歷的方法,然後也有一點左右比較,進行下一層吧

3.1 看影片以後的程式碼實現

看了影片,覺得其實用高度來求,比深度,更容易一些

# 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 maxDepth(self, root: Optional[TreeNode]) -> int:
        return self.get_height(root)

    def get_height(self,node):
        if node == None:
            return 0
        leftheight = self.get_height(node.left)
        rightheight = self.get_height(node.right)
        max_height = 1+max(leftheight,rightheight)
        return max_height

3.2 小結

  1. 這一題裡面有一個地方寫錯了,就是一個類中,他們兩個屬於同一個級別的,但是第一次縮排了
  2. 在函式類別定義函式的時候,需要對其進行一個self

4 leetcode111.二叉樹的最小深度

題目連結:111. 二叉樹的最小深度 - 力扣(LeetCode)

文章連結:程式碼隨想錄

影片連結:看起來好像做過,一寫就錯! | LeetCode:111.二叉樹的最小深度_嗶哩嗶哩_bilibili

思路:想著將上一道題改一下,沒想到報錯了,然後就看到了另一種情況,在想如何處理

4.1 看影片後的一部分處理

主要是面對左右有空的情況,學到了學到了,其實可以理解為這個二叉樹從頭遍歷,只需要兩邊計算即可,哈哈哈哈哈哈

# 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 minDepth(self, root: Optional[TreeNode]) -> int:
        return self.depth(root)
    def depth(self,node):
        if node == None:
            return 0
        leftdepth = self.depth(node.left)
        rightdepth = self.depth(node.right)
        if node.left == None and node.right != None:
            return 1+rightdepth
        if node.right == None and node.left != None:
            return 1+leftdepth
        min_dep = 1+min(leftdepth,rightdepth)
        return min_dep

4.2 小結

  1. 這個題,就是在一道一道下來後,發現這道題挺簡單的,然後嘗試自己寫了,寫通了還理解了

5 今日總結

  1. 記錄一下第一次因為專案通宵,後來結果我來寫了這個題目
  2. 遞迴真的有理解了,老師講的太清楚了,真的,可能第一次看會有不懂得,但是越看越明瞭,路越好走

相關文章