leetcode 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/
2 2
/ \ /
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/
2 2
\
3 3
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/symmetric-tree
思路:利用中序遍历的同时去判断(非递归版
非递归版
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(!root)return true;
stack<TreeNode*> stk1;
stack<TreeNode*> stk2;
auto p=root;
auto q=root;
while(p||q||stk1.size()||stk2.size()){
while(p&&q){
stk1.push(p);
stk2.push(q);
p=p->left;
q=q->right;
}
if(p||q){
return false;
}
p=stk1.top();
q=stk2.top();
stk1.pop();
stk2.pop();
if(p->val!=q->val)return false;
p=p->right;
q=q->left;
}
return true;
}
};
递归版
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(!root)return true;
return dfs(root->left,root->right);
}
bool dfs(TreeNode* l,TreeNode* r){
if(!l||!r)return !l&&!r;
if(l->val!=r->val)return false;
return dfs(l->left,r->right)&&dfs(l->right,r->left);
}
};