本篇基于b站靈茶山艾府。
100. 相同的樹
給你兩棵二叉樹的根節點 p
和 q
,編寫一個函數來檢驗這兩棵樹是否相同。
如果兩個樹在結構上相同,并且節點具有相同的值,則認為它們是相同的。
示例 1:
輸入:p = [1,2,3], q = [1,2,3]
輸出:true
示例 2:
輸入:p = [1,2], q = [1,null,2]
輸出:false
示例 3:
輸入:p = [1,2,1], q = [1,1,2]
輸出: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 isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:def dfs(p, q):if not p or not q:# 兩個節點都為空,返回True,否則返回Falsereturn p == q# 判斷兩個節點值和左右子樹相不相等return p.val == q.val and dfs(p.left, q.left) and dfs(p.right, q.right)return dfs(p, q)
101. 對稱二叉樹
給你一個二叉樹的根節點 root
, 檢查它是否軸對稱。
示例 1:
輸入:root = [1,2,2,3,4,4,3]
輸出:true
示例 2:
輸入:root = [1,2,2,null,3,null,3]
輸出: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 isSymmetric(self, root: Optional[TreeNode]) -> bool:# 本質上跟判斷相同的樹一樣def dfs(p, q):if not p or not q:return p == q# 唯一不同的就是傳入的是左子樹的左孩子和右子樹的右孩子(左子樹的右孩子和右子樹的左孩子)來判斷return p.val == q.val and dfs(p.left, q.right) and dfs(p.right, q.left)return dfs(root.left, root.right)
110. 平衡二叉樹
給定一個二叉樹,判斷它是否是平衡二叉樹
示例 1:
輸入:root = [3,9,20,null,null,15,7]
輸出:true
示例 2:
輸入:root = [1,2,2,3,3,null,null,4,4]
輸出:false
示例 3:
輸入:root = []
輸出:true
# 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 isBalanced(self, root: Optional[TreeNode]) -> bool:def dfs(node):if not node:# 返回一個元組,第一個值為該樹是否為平衡二叉樹,第二個值是此樹的高度return (True, 0)f1, h1 = dfs(node.left)f2, h2 = dfs(node.right)# 如果左右子樹的高度差不超過1且左右子樹都是平衡二叉樹,返回True,且向上層返回該樹的高度return (abs(h1 - h2) <= 1 and f1 and f2, max(h1, h2) + 1)return dfs(root)[0]
199. 二叉樹的右視圖
給定一個二叉樹的 根節點 root
,想象自己站在它的右側,按照從頂部到底部的順序,返回從右側所能看到的節點值。
示例 1:
輸入: root = [1,2,3,null,5,null,4]
輸出:[1,3,4]
解釋:
示例 2:
輸入: root = [1,2,3,4,null,null,null,5]
輸出:[1,3,4,5]
解釋:
示例 3:
輸入: root = [1,null,3]
輸出:[1,3]
示例 4:
輸入: root = []
輸出:[]
# 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 rightSideView(self, root: Optional[TreeNode]) -> List[int]:def dfs(node, h):if not node:return# 如果首次遇到這個深度,說明是最右邊的節點,需要記錄高度if h == len(ans):ans.append(node.val)# 從右子樹開始遍歷dfs(node.right, h + 1)dfs(node.left, h + 1)ans = []dfs(root, 0)return ans