[牛客题霸 [判断二叉树是否对称] C++题解/答案](https://www.nowcoder.com/practice/1b0b7f371eae4204bc4a7570c84c2de1?tpId=117&&tqId=34937&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking)
题目描述
给定一棵二叉树,判断琪是否是自身的镜像(即:是否对称)
例如:下面这棵二叉树是对称的
1
/
2 2
/ \ /
3 4 4 3
下面这棵二叉树不对称。
1
/
2 2
\
3 3
备注:
希望你可以用递归和迭代两种方法解决这个问题
题解:
递归法:
自定义一个判断函数,来不断递归左右两边子树的对称子树是否相等
也就是左子树的左边和右子树的右边比较
isEqual(node1->left,node2->right)&&isEqual(node1->right,node2->left);
注:空子树也是对称的
这个思路比较简单
迭代法:
用栈来存根的左右两边子树,然后用while不断弹出元素,比较,再压入新元素
(迭代法的代码就略了)
代码:
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */
class Solution {
public:
/** * * @param root TreeNode类 * @return bool布尔型 */
bool isEqual(TreeNode* node1,TreeNode* node2)
{
if(node1==NULL&&node2==NULL)
{
return true;
}
if(node1==NULL||node2==NULL)
{
return false;
}
if(node1->val!=node2->val)
{
return false;
}
return isEqual(node1->left,node2->right)&&isEqual(node1->right,node2->left);
}
bool isSymmetric(TreeNode* root) {
// write code here
if(root==NULL)return 1;
// if(!root->left&&!root->left)return root->val;
return isEqual(root->left, root->right);
}
};