• LeetCode Symmetric Tree


     1 class Solution {
     2 public:
     3     bool isSymmetric(TreeNode *root) {
     4         if (root == NULL) return true;
     5         return dfs(root->left, root->right);
     6     }
     7     
     8     bool dfs(TreeNode* curnode, TreeNode* symnode) {
     9         if (curnode == NULL && symnode == NULL) return true;
    10         if (curnode != NULL && symnode != NULL && curnode->val == symnode->val) {
    11             return dfs(curnode->left, symnode->right) && dfs(curnode->right, symnode->left);
    12         }
    13         return false;
    14     }
    15     
    16     bool _isSymmetric(TreeNode *root) {
    17         if (root == NULL) return true;
    18         vector<TreeNode*> sa;
    19         vector<TreeNode*> sb;
    20         sa.push_back(root->left);
    21         sb.push_back(root->right);
    22 
    23         while (!sa.empty() && !sb.empty()) {
    24             TreeNode* anode = sa.back();
    25             TreeNode* bnode = sb.back();
    26 
    27             sa.pop_back();
    28             sb.pop_back();
    29             
    30             if (anode == NULL && bnode == NULL) {
    31                 continue;
    32             }
    33             
    34             if (anode != NULL && bnode != NULL && anode->val == bnode->val) {
    35                 sa.push_back(anode->left);
    36                 sb.push_back(bnode->right);
    37 
    38                 sa.push_back(anode->right);
    39                 sb.push_back(bnode->left);
    40             } else {
    41                 return false;
    42             }
    43         }
    44         if (sa.size() != sb.size()) return false;
    45         return true;
    46     }
    47 };

    同时对左右子树进行遍历,只不过因为是对称的所以遍历时节点顺序要交换一下。如果是对称的,那么遍历节点应该一一对应,如果中间出现不一致则不对称。

    第二轮:

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

    For example, this binary tree is symmetric:

        1
       / 
      2   2
     /  / 
    3  4 4  3
    

    But the following is not:

        1
       / 
      2   2
          
       3    3
    只回忆起递归版本
    /**
     * Definition for binary tree
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        bool isSymmetric(TreeNode *root) {
            if (root == NULL) {
                return true;
            }
            return isSymmetric(root->left, root->right);
        }
        
        bool isSymmetric(TreeNode* root, TreeNode* symRoot) {
            if (root == NULL && symRoot == NULL) {
                return true;
            }
            if (root == NULL || symRoot == NULL) {
                return false;
            }
            if (root->val != symRoot->val) {
                return false;
            }
            
            return isSymmetric(root->left, symRoot->right) && isSymmetric(root->right, symRoot->left);
        }
    };
  • 相关阅读:
    大学生自学网
    如何保证主从复制数据一致性
    CDN
    后端 线上 服务监控 与 报警 方案2
    利用 Gearman 实现系统错误报警功能
    增量部署和全量部署
    后端线上服务监控与报警方案
    简析TCP的三次握手与四次分手
    301 和 302 对 SEO 的影响
    Linux 查看负载
  • 原文地址:https://www.cnblogs.com/lailailai/p/3638520.html
Copyright © 2020-2023  润新知