101. Symmetric Tree

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

For example, this binary tree[1,2,2,3,4,4,3]is symmetric:

1/\22/\/\3443


But the following[1,2,2,null,3,null,3]is not:

1/\22\\33


代码如下:

/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode(intx):val(x),left(NULL),right(NULL){}*};*///思路://1.判断root是否为空,若空则返回true,否则false;//2.判断root->left,root->right是否同时为空,若为空则返回true;//3.判断root->left,root->right同时不为空时,将root->right反转,//然后判断新root->right和root->left是否为相同的树。classSolution{public:boolisSameTree(TreeNode*p,TreeNode*q){boolchildResult;if(NULL==p&&NULL==q)returntrue;if(NULL!=p&&NULL!=q&&p->val==q->val){returnchildResult=isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);}returnfalse;}voidreverseTree(TreeNode*root){if(!root)return;TreeNode*p,*q;p=root->left;q=root->right;root->left=q;root->right=p;reverseTree(root->left);reverseTree(root->right);}boolisSymmetric(TreeNode*root){if((NULL==root)||(NULL==root->left&&NULL==root->right))returntrue;if(NULL!=root->left&&NULL!=root->right){reverseTree(root->right);returnisSameTree(root->left,root->right);}returnfalse;}};