天天看點

LeetCode:101 對稱二叉樹 遞歸

題目描述

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

例如,二叉樹 [1,2,2,3,4,4,3] 是對稱的。

LeetCode:101 對稱二叉樹 遞歸

但是下面這個 [1,2,2,null,3,null,3] 則不是鏡像對稱的:

LeetCode:101 對稱二叉樹 遞歸

說明:

如果你可以運用遞歸和疊代兩種方法解決這個問題,會很加分。

來源:力扣(LeetCode) 連結:https://leetcode-cn.com/problems/symmetric-tree

著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

思路

設要判斷兩節點t1,t2是否對稱:

  • 如果兩個節點為空,那麼他們對稱
  • 如果兩個節點不同時為空,他們不對稱
  • 如果兩個節點都不空,并且

    1.兩節點 t1, t2 存儲的值相同

    2.t1->left 和 t2->right 對稱

    3.t1->right和 t2->left 對稱

    那麼他們對稱

代碼

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool sym(TreeNode*& t1, TreeNode*& t2)
    {
        if(t1 && t2 && t1->val==t2->val)
            return sym(t1->left, t2->right) && sym(t1->right, t2->left);
        if(!t1 && !t2) return true;
        return false;
    }
    bool isSymmetric(TreeNode* root)
    {
        if(!root) return true;
        return sym(root->left, root->right);
    }
};