[LeetCode問題解]:Symmetric Tree

5366 ワード

前言
 
【LeetCode問題解】シリーズ転送ゲート:  http://www.cnblogs.com/double-win/category/573499.html
 
1.タイトルの説明
 
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
    1

   / \

  2   2

 / \ / \

3  4 4  3

 
But the following is not:
    1

   / \

  2   2

   \   \

   3    3

 
Note: Bonus points if you could solve it both recursively and iteratively.
confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.
OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
   1

  / \

 2   3

    /

   4

    \

     5
The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}" .
 

2.

 

, 。

 

3.

 
(1) , 。
:  1
(2) , , 。
: 1 1 1
/   \  /    \
2 2 2  2
/  \
4    4
(3) , , :
         。
         。
 

4:

class Solution {

public:

    bool isSymmetric(TreeNode *root){

        return root? Symmetric(root->left,root->right):true;

    }

    bool Symmetric(TreeNode *left, TreeNode *right){

        if(left==NULL && right==NULL) return true;//       

        if(!left || !right) return false; //                

        return left->val == right->val

            && Symmetric(left->left,right->right)

            && Symmetric(left->right,right->left);

    }

};
 

Double_Win

http://www.cnblogs.com/double-win/p/3891215.html

: , , ~