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);
        }
    };
    
  • 相关阅读:
    opencv 1.0 与 2.0的库对应表
    OpenCV SIFT原理与源码分析
    计算机杂志排名
    opencv Installation in Linux and hello world
    SSL 通信及 java keystore 工具介绍
    侧方位停车技巧图解 教你快速便捷停车(图)
    opencv 中文文档地址
    books
    Mysql processlist命令
    MYSQL优化之碎片整理
  • 原文地址:https://www.cnblogs.com/fxh0707/p/15048393.html
Copyright © 2011-2022 走看看