Symmetric Tree

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).


Example:
Input:  root={1,2,2,3,4,4,3}
Output: true


Approach

Java

public class SymmetricTree {
    public static void main(String[] args) {
        TreeNode tree = new TreeNode(1);
        tree.left = new TreeNode(2);
        tree.right = new TreeNode(2);
        tree.left.left = new TreeNode(3);
        tree.left.right = new TreeNode(4);
        tree.right.left = new TreeNode(4);
        tree.right.right = new TreeNode(3);
        System.out.println(isSymmetric(tree));
    }

    static boolean isMirror(TreeNode root1TreeNode root2) {
        if (root1 == null && root2 == null)
            return true;
        if (root1 != null && root2 != null && root1.val == root2.val)
            return isMirror(root1.leftroot2.right) && 
                    isMirror(root1.rightroot2.left);
        return false;
    }

    static boolean isSymmetric(TreeNode root) {
        return isMirror(root, root);
    }

}

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode() {
    }

    TreeNode(int val) {
        this.val = val;
    }

    TreeNode(int valTreeNode leftTreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}

C++

#include <bits/stdc++.h>
using namespace std;
//struct for treenode
struct TreeNode{
    int data;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int data)
    {
        this->data=data;
        this->left=NULL;
        this->right=NULL;
    }
};


bool isMirror(TreeNode *root1,TreeNode *root2)
{
        if(root1==NULL && root2==NULL)
               return true;
        if(root1!=NULL &&root2!=NULL && root1->data==root2->data)
               return isMirror(root1->left,root2->right)&&
                    isMirror(root1->right,root2->left);
        return false;
}
bool isSymmetric(TreeNode* root
{
        return isMirror(root,root);
}

int main()
{

    TreeNode *root=new TreeNode(1);
    root->left=new TreeNode(2);
    root->right=new TreeNode(2);
    root->left->left=new TreeNode(3);
    root->left->right=new TreeNode(4);
    root->right->left=new TreeNode(4);
    root->right->right=new TreeNode(3);
    if(isSymmetric(root))
      cout<<"true";
    else
      cout<<"false";
    
     return 0;
    
}


No comments:

Post a Comment