题目来源
面试题28. 对称的二叉树
题目描述

struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
class Solution {
public:
bool isSymmetric(TreeNode* root) {
}
};
题目解析
递归
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null){
return true;
}
return helper(root.left, root.right);
}
private boolean helper(TreeNode left, TreeNode right){
if (left == null && right == null){
return true;
}
if (left == null ){
return false;
}
if (right == null){
return false;
}
if (right.val != left.val){
return false;
}
return helper(left.left, right.right) && helper(left.right, right.left);
}
}

辅助栈
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null){
return true;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root.right);
stack.push(root.left);
while (!stack.empty()){
TreeNode left = stack.pop();
TreeNode right = stack.pop();
if (left == null && right == null){
continue;
}
if (left == null){
return false;
}
if (right == null){
return false;
}
if (left.val != right.val){
return false;
}
stack.push(left.left);
stack.push(right.right);
stack.push(left.right);
stack.push(right.left);
}
return true;
}
}
