p4 判断二叉树是否对称(leetcode101)

一:解题思路

这道题目与判断二叉树是否相等基本上是一模一样的。有2种解法,第一种:递归法。第二种:迭代法。

二:完整代码示例 (C++版和Java版)

递归版C++:

 class Solution 
 {
 public:
     bool isSymmetricRecursive(TreeNode* left, TreeNode* right)
     {
         if (left == NULL && right == NULL) return true;
         if (left == NULL || right == NULL) return false;

         return (left->val==right->val) && 
             (isSymmetricRecursive(left->left,right->right)) && 
             (isSymmetricRecursive(left->right,right->left));
     }

     bool isSymmetric(TreeNode* root) 
     {
         if (root == NULL) return true;

         return isSymmetricRecursive(root->left,root->right);
     }
 };

Java递归版:

class Solution {
    public boolean isSymmetricRecursive(TreeNode left,TreeNode right)
    {
        if((left==null)&&(right==null)) return true;
        if((left==null)||(right==null)) return false;

        return (left.val==right.val)&&
                (isSymmetricRecursive(left.left,right.right))&&
                (isSymmetricRecursive(left.right,right.left));
    }

    public boolean isSymmetric(TreeNode root)
    {
        if(root==null) return true;

        return isSymmetricRecursive(root.left,root.right);
    }
}

迭代版C++:

class Solution 
 {
 public:
     bool isSymmetric(TreeNode* root) 
     {
         if (root == NULL) return true;

         stack<TreeNode*> stack;

         stack.push(root->left);
         stack.push(root->right);

         while (!stack.empty())
         {
             TreeNode* s = stack.top();
             stack.pop();
             TreeNode* t = stack.top();
             stack.pop();

             if ((s == NULL) && (t == NULL)) continue;
             if ((s == NULL) || (t == NULL)) return false;
             if (s->val != t->val) return false;

             stack.push(s->left);
             stack.push(t->right);
             stack.push(s->right);
             stack.push(t->left);
         }

         return true;
     }
 };

Java迭代版:

class Solution {
    public boolean isSymmetric(TreeNode root)
    {
        if(root==null) return true;

        Stack<TreeNode> stack=new Stack<>();

        stack.push(root.left);
        stack.push(root.right);

        while(!stack.empty())
        {
            TreeNode s=stack.pop();
            TreeNode t=stack.pop();

            if((s==null)&&(t==null)) continue;
            if((s==null)||(t==null)) return false;
            if(s.val!=t.val) return false;
            
            stack.push(s.left);
            stack.push(t.right);
            stack.push(s.right);
            stack.push(t.left);
        }

        return true;
    }
}

猜你喜欢

转载自www.cnblogs.com/repinkply/p/12434920.html