Symmetric Tree

方法一:使用非递归的方式,基于前序遍历的方法,与sametree方法的不同在于symmetric需要一个从做节点遍历,一个从右节点遍历

/**
 * 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 isSymmetric(TreeNode* root) {
        stack<TreeNode *> s;
        s.push(root);
        s.push(root);
        
        while(!s.empty())
        {
            TreeNode *left = s.top();
            s.pop();
            TreeNode *right = s.top();
            s.pop();
            
            if(!left && !right)
                continue;
            if(!left || !right)
                return false;
                
            if(left->val == right->val)
            {
                s.push(left->right);
                 s.push(right->left);
                s.push(left->left);
                s.push(right->right);
            }
            else
                return false;
        }
        
        return true;
    }
};

方法二:使用递归的方法,与sametree方法类似

/**
 * 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 isSymmetric(TreeNode* root) {
        return symmetric(root, root);
    }
    
    bool symmetric(TreeNode *p ,TreeNode *q)
    {
        if(!p && !q)
            return true;
        if(!p || !q)
            return false;
            
        return (p->val ==  q->val) && symmetric(p->left, q->right) && symmetric(p->right, q->left);
    }
};

 

posted @ 2017-04-15 11:30  chengcy  Views(116)  Comments(0)    收藏  举报