题解 | #对称的二叉树#
对称的二叉树
https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pRoot TreeNode类 * @return bool布尔型 */ bool comparetwo(struct TreeNode*root1,struct TreeNode*root2){ if(root1==NULL&&root2==NULL){ return true; } if(root1==NULL||root2==NULL||root1->val!=root2->val){ return false; } return comparetwo(root1->left,root2->right)&&comparetwo(root1->right, root2->left); } bool isSymmetrical(struct TreeNode* pRoot ) { // write code here return comparetwo(pRoot, pRoot); }
在比较的过程中分为三种情况,第一种情况:两个节点同时为空,此时一个分支比较结束,返回true;第二种情况:此时只有一个分支为空,或者两个分支的点的值val不相等,此时返回false。根据镜像原理,我们需要拿节点一的左节点同节点二的右节点进行比较,同时我们还需要拿节点一的右节点同节点二的左节点进行比较,同时返回真才证明上一分支的结果为真。