题解 | #对称的二叉树#
对称的二叉树
https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pRoot TreeNode类 * @return bool布尔型 */ bool doublebianli(TreeNode* lefto, TreeNode* righto) { static bool ans = true; if (!lefto->left && righto->right || lefto->left && !righto->right) { ans = false; cout<<"leftout"; } if (!lefto->right && righto->left || lefto->right && !righto->left) { ans = false; cout<<"rightout"; } if (lefto->val != righto->val) { ans = false; cout<<"valueout"; } if (lefto->left && righto->right) doublebianli(lefto->left,righto->right); if (lefto->right && righto->left) doublebianli(lefto->right, righto->left); return ans; } bool isSymmetrical(TreeNode* pRoot) { if(pRoot) { if(pRoot->left&&pRoot->right) return doublebianli(pRoot->left,pRoot->right); if (!pRoot->right && pRoot->left || pRoot->right && !pRoot->left) return false; } cout<<"out2"; return true; } };
想复杂了,同时进行前序遍历,并且要需要异或判断,因为,左节点和右节点可以同时为0,可以同时为1,但不能一个有,一个没有,这个就是异或运算,只要异或出来为1就不行.这里有异或的逻辑表达式.!&&||&&!为异或.
其实可以中序遍历在数组中,然后对称的相减.全部为0就是对称的