1. 程式人生 > >【資料結構】給定一個二叉樹,檢查它是否是映象對稱的

【資料結構】給定一個二叉樹,檢查它是否是映象對稱的

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

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

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

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

    1
   / \
  2   2
   \   \
   3    3

思路分析:

(1)如果這棵樹是空樹,則返回true;

(2)如果樹的左子樹為空,右子樹不為空,則返回false;

(3)否則就遞迴去判斷左子樹的右子樹和右子樹的左子樹是否相等,如果相等,返回true,若不相等,則返回false;

具體程式碼如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

bool  _isSymmetric(struct TreeNode* left,struct TreeNode* right)
 {
    
    if(left==NULL&&right==NULL)
    {
        return true;
    }
    if(left==NULL||right==NULL)
    {
        return false;
    }
    
    return left->val==right->val
       && _isSymmetric(left->left,right->right)
      && _isSymmetric(left->right,right->left);
 }

bool isSymmetric(struct TreeNode* root) {
    
    if(root==NULL)
    {
        return true;
    }
   return _isSymmetric(root->left,root->right);
    
}