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;}};
