101. 对称二叉树

按照左右子树的情况进行讨论,左空右不空,左不空右空,左右都空和左右都不空
给你一个二叉树的根节点 root , 检查它是否轴对称。

示例 1:
image.png
输入:root = [1,2,2,3,4,4,3] 输出:true
示例 2:
image.png
输入:root = [1,2,2,null,3,null,3] 输出:false

一、递归

  1. class Solution {
  2. public:
  3. bool compare(TreeNode*node1,TreeNode*node2)
  4. {
  5. if(!node1&&!node2)return true;
  6. else if(!node1||!node2)return false;
  7. else if(node1->val!=node2->val)return false;
  8. return compare(node1->left,node2->right)&&compare(node1->right,node2->left);
  9. }
  10. bool isSymmetric(TreeNode* root) {
  11. if(root==NULL)return true;
  12. return compare(root->left,root->right);
  13. }
  14. };

二、迭代

  1. class Solution {
  2. public:
  3. bool isSymmetric(TreeNode* root) {
  4. if(root==NULL)return true;
  5. stack<TreeNode*> st;
  6. st.push(root->right);
  7. st.push(root->left);
  8. while(!st.empty())
  9. {
  10. TreeNode* leftNode = st.top();
  11. st.pop();
  12. TreeNode* rightNode = st.top();
  13. st.pop();
  14. //都为NULL的是继续循环,因为栈内可能还有结点
  15. if(!leftNode && !rightNode)continue;
  16. if(!leftNode || !rightNode)return false;
  17. if(leftNode->val != rightNode->val)return false;
  18. st.push(leftNode->left);
  19. st.push(rightNode->right);
  20. st.push(leftNode->right);
  21. st.push(rightNode->left);
  22. }
  23. return true;
  24. }
  25. };