刷代码随想录有感(44):对称二叉树

题干:

代码:

class Solution {
public:
    bool compare(TreeNode* left, TreeNode* right){//传入左右子树
        if(left == NULL && right != NULL) return false;//子
        else if(left != NULL && right == NULL) return false;//子
        else if(left == NULL && right == NULL) return true;//子
        else if(left -> val != right -> val) return false;//子
        
        bool inside = compare(left -> right, right -> left);//父
        bool outside = compare(left -> left, right -> right);//父
        bool res = inside && outside;//父
        return res;
    }
    bool isSymmetric(TreeNode* root) {
        bool res = compare(root -> left, root -> right);
        return res;
    }
};

某种意义上是后序遍历。

补充:迭代实现:
 

//实现二叉树是否对称的迭代方法,我们可以使用队列。基本思路是利用队列存储需要比较的节点,每次取出两个节点比较它们的值,然后按照镜像的方式将它们的子节点成对加入队列。以下是一个具体实现的示例:
bool isSymmetric(TreeNode* root) {
    if (root == NULL) return true;//用于降低时间复杂度
    
    // 使用队列来迭代处理
    queue<TreeNode*> q;
    // 初始时将根节点的左右子节点加入队列
    q.push(root->left);
    q.push(root->right);
    
    while (!q.empty()) {
        TreeNode* leftnode = q.front(); 
        q.pop();
        TreeNode* rightnode = q.front(); 
        q.pop();
        // 如果两个节点都为空,则继续下一轮比较,说明此时已经顺利遍历到叶子了
        if (leftnode == NULL && rightnode == NULL) continue;
        // 只要遍历过程中出现其中一个节点为空,或者两个节点的值不相等,则不对称,立刻返回false
        if (!leftnode || !rightnode || leftnode->val != rightnode->val) return false;
        // 将要比较的子节点成对加入队列
        q.push(leftnode->left);//外
        q.push(rightnode->right);//外
        q.push(leftnode->right);//内
        q.push(rightnode->left);//内
    }
    
    return true; // 能顺利完成while说明每一次都能顺利达到left == NULL && right == NULL,返回 true
}

原理其实也就是镜像比较两个节点值是否相同。

相关推荐

  1. 代码随想——day15

    2024-04-24 14:38:04       43 阅读
  2. 代码随想——day18

    2024-04-24 14:38:04       60 阅读
  3. 代码随想——day22

    2024-04-24 14:38:04       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-24 14:38:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-24 14:38:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-24 14:38:04       82 阅读
  4. Python语言-面向对象

    2024-04-24 14:38:04       91 阅读

热门阅读

  1. fps游戏断线重连架构设计

    2024-04-24 14:38:04       29 阅读
  2. 数据结构—单链表实现通讯录

    2024-04-24 14:38:04       31 阅读
  3. 算法第42天动态规划4

    2024-04-24 14:38:04       31 阅读
  4. 捷克营业执照申请

    2024-04-24 14:38:04       39 阅读
  5. office的文件(word、excel、ppt)图标变白

    2024-04-24 14:38:04       93 阅读
  6. websocket 和 eventsource 的区别和应用

    2024-04-24 14:38:04       33 阅读
  7. 解决常见的 `npm install` 报错

    2024-04-24 14:38:04       28 阅读
  8. Python的一些中级用法

    2024-04-24 14:38:04       45 阅读
  9. unity引擎如何构建安卓包

    2024-04-24 14:38:04       29 阅读
  10. SQLAlchemy批量更新

    2024-04-24 14:38:04       43 阅读
  11. vue预加载图片

    2024-04-24 14:38:04       36 阅读