这道题我一开始的思路是先用中序遍历该对称二叉树,获取到的数据判断是否是回文串,然后判断是否对称,但是我写不出来,我个人觉得方法好像没啥问题,我也没调试,爸爸们求教
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: bool isSymmetric(TreeNode* root) { stack <TreeNode*> stack; // TreeNode* temp = root -> left; while(temp != nullptr) { stack.push(temp); temp = temp -> left; } while(root) { stack.push(root); root = root -> right; } // int Test[stack.size()]; int len = 0; while(!stack.empty()) { Test[len++] = stack.top() -> val; stack.pop(); } int i = 0, j = len - 1; while(i < j) { if(Test[i] == Test[j]) { i++; j--; } } if(i >= j) return true; else return false; } };题解的递归的方法很秀,确实很牛!从没想到再用一个函数来求解,这个函数关键是用两个指针q和p,假设是对称二叉树,则p的左值等于q的右值,q的左值的p的右值,并且q的左p的右,p的左q的右都要非空!
class Solution { public: bool Check(TreeNode* q, TreeNode* p) { if(q == nullptr && p == nullptr) { return true; } if(q == nullptr || p == nullptr) { return false; } return Check(q -> left, p -> right) && Check(p -> left, q -> right) && p -> val == q -> val; } bool isSymmetric(TreeNode* root) { return Check(root, root); } };