101. 对称二叉树、
按照左右子树的情况进行讨论,左空右不空,左不空右空,左右都空和左右都不空
给你一个二叉树的根节点 root , 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3] 输出:false
一、递归
class Solution {
public:
bool compare(TreeNode*node1,TreeNode*node2)
{
if(!node1&&!node2)return true;
else if(!node1||!node2)return false;
else if(node1->val!=node2->val)return false;
return compare(node1->left,node2->right)&&compare(node1->right,node2->left);
}
bool isSymmetric(TreeNode* root) {
if(root==NULL)return true;
return compare(root->left,root->right);
}
};
二、迭代
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root==NULL)return true;
stack<TreeNode*> st;
st.push(root->right);
st.push(root->left);
while(!st.empty())
{
TreeNode* leftNode = st.top();
st.pop();
TreeNode* rightNode = st.top();
st.pop();
//都为NULL的是继续循环,因为栈内可能还有结点
if(!leftNode && !rightNode)continue;
if(!leftNode || !rightNode)return false;
if(leftNode->val != rightNode->val)return false;
st.push(leftNode->left);
st.push(rightNode->right);
st.push(leftNode->right);
st.push(rightNode->left);
}
return true;
}
};