zoukankan      html  css  js  c++  java
  • 剑指 Offer 28. 对称的二叉树

    如果一个树的左子树与右子树镜像对称,那么这个树是对称的。

    因此,该问题可以转化为:两个树在什么情况下互为镜像?

    如果同时满足下面的条件,两个树互为镜像:

    1. 它们的两个根结点具有相同的值
    2. 每个树的右子树都与另一个树的左子树镜像对称

    我们可以实现这样一个递归函数,通过「同步移动」两个指针的方法来遍历这棵树,p 指针和 q 指针一开始都指向这棵树的根,随后 p 右移时,q 左移,p 左移时,q 右移。每次检查当前 p 和 q 节点的值是否相等,如果相等再判断左右子树是否对称。

    /**
     * Definition for a binary tree node.
     * 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) return true;
            return isSame(root->left, root->right);
        }
    
        bool isSame(TreeNode* root1, TreeNode* root2) {
            if (!root1 && !root2) return true;
            if (!root1 || !root2) return false;
            if (root1->val != root2->val) return false;
            return isSame(root1->left, root2->right) && isSame(root1->right, root2->left);
        }
    };
    
  • 相关阅读:
    smbmnt
    smbd
    smbcontrol
    smbclient
    smb.conf
    sleep
    size
    oracle-rman-1
    cURL 学习笔记与总结(5)用 cURL 访问 HTTPS 资源
    Java实现 LeetCode 90 子集 II(二)
  • 原文地址:https://www.cnblogs.com/fxh0707/p/15048393.html
Copyright © 2011-2022 走看看