题解 | #对称的二叉树#
对称的二叉树
https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ #include <cstddef> #include <stack> class Solution { public: bool isSymmetrical(TreeNode* pRoot) { //同时遍历左右两颗二叉树(如果左右两颗二叉树都不为空树),判断其是否相等 if(pRoot==nullptr) return true; TreeNode* bt2; TreeNode* bt1; stack<TreeNode*> s1; stack<TreeNode*> s2; bt2=pRoot->right; bt1=pRoot->left; //先排除有子树为空树的情况 if(bt1==nullptr&&bt2!=nullptr) return false; if(bt2==nullptr&&bt1!=nullptr) return false; //遍历左子树,顺便对称遍历右子树 while(!s1.emptysunbit1!=nullptr) { while(bt1!=nullptr) { //判断遍历到的结点是否相等 if(bt2==nullptr||bt1->val!=bt2->val) return false; s1.push(bt1); s2.push(bt2); bt1=bt1->left; bt2=bt2->right; } //注意,循环出来的那一次也要判断是否相等 if(bt2!=nullptr) return false; if(!s1.empty()) { bt1=s1.top(); bt2=s2.top(); s1.pop(); s2.pop(); bt1=bt1->right; bt2=bt2->left; } } return true; } };