对称二叉树
这道题我一开始的思路是先用中序遍历该对称二叉树,获取到的数据判断是否是回文串,然后判断是否对称,但是我写不出来,我个人觉得方法好像没啥问题,我也没调试,爸爸们求教
/**
* 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);
}
};