題目:
這題是判斷一棵二元樹是否是對稱的。對稱二元樹是一種特別的二元樹,從根節點到左右子樹呈現鏡像關係。這道題目經常出現在面試中,是一個樹結構遞迴遍歷和對稱性判斷的經典題。
範例:
給定一棵二元樹,檢查它是否是鏡像對稱的。
例如,這棵二元樹是對稱的:
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);
}
};