1. 程式人生 > 實用技巧 >Leetcode 100 相同的樹

Leetcode 100 相同的樹

100. 相同的樹

Difficulty: 簡單

給定兩個二叉樹,編寫一個函式來檢驗它們是否相同。

如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。

示例1:

輸入:       1         1
          / \       / \
         2   3     2   3

        [1,2,3],   [1,2,3]

輸出: true

示例 2:

輸入:      1          1
          /           \
         2             2

        [1,2],     [1,null,2]

輸出: false

示例3:

輸入:       1         1
          / \       / \
         2   1     1   2

        [1,2,1],   [1,1,2]

輸出: false

Solution

Language: 全部題目

# 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: TreeNode, q: TreeNode) -> bool:
        # 先序遍歷和後序遍歷可以唯一確定一顆二叉樹
    return preOrderTraversal(p) == preOrderTraversal(q) and inOrderTraversal(p) == inOrderTraversal(q)
    
def preOrderTraversal(tree):
  if not tree:
        # 注意為null的節點要向棧中新增""
    return [""]
  else:
    d = [""] if not tree.val else [tree.val]
    l = preOrderTraversal(tree.left)
    r = preOrderTraversal(tree.right)
    return d + l + r
​
def inOrderTraversal(tree):
  if not tree:
    return [""]
  else:
    l = inOrderTraversal(tree.left)
    d = [""] if not tree.val else [tree.val]
    r = inOrderTraversal(tree.right)
    return l + d + r