iT邦幫忙

2024 iThome 鐵人賽

0
佛心分享-刷題不只是刷題

刷經典 LeetCode 題目系列 第 60

經典LeetCode 101. Symmetric Tree

  • 分享至 

  • xImage
  •  

題目:
這題是判斷一棵二元樹是否是對稱的。對稱二元樹是一種特別的二元樹,從根節點到左右子樹呈現鏡像關係。這道題目經常出現在面試中,是一個樹結構遞迴遍歷和對稱性判斷的經典題。

範例:

給定一棵二元樹,檢查它是否是鏡像對稱的。

例如,這棵二元樹是對稱的:

      1
     / \
    2   2
   / \ / \
  3  4 4  3

這棵則不是:

      1
     / \
    2   2
     \   \
     3    3

解題思路

使用遞迴的方式來檢測,一開始呼叫 isMirror 函式並帶入同一個 root 節點,然後在 isMirror 裡檢查 t1 與 t2 這兩個子樹是否為對稱,

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    bool isSymmetric(TreeNode* root) {       
        return isMirror(root, root);
    }

private:
    bool isMirror(TreeNode* t1, TreeNode* t2) {
        if (t1 == nullptr && t2 == nullptr)
            return true;
        else if (t1 == nullptr || t2 == nullptr)
            return false;

        return t1->val == t2->val && 
            isMirror(t1->left, t2->right) && 
            isMirror(t1->right, t2->left);
    }
};

參考:
#101. Symmetric Tree


上一篇
經典LeetCode 14. Longest Common Prefix
下一篇
經典LeetCode 108. Convert Sorted Array to Binary Search Tree
系列文
刷經典 LeetCode 題目66
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言