zoukankan      html  css  js  c++  java
  • leet code 101. 对称二叉树

    今天leet code首页的每日一题,题目如下:

    给定一个二叉树,检查它是否是镜像对称的。
    例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / 2 2 / / 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / 2 2 3 3

    看到题目后没有思路,找不到判定依据,从题目上看首选方法是递归,但是我没有找到子问题的定义方式,看了解答后才恍然大悟,假设有两个可以分身的人在这个二叉树里往下走,一个人走左边,一个人走右边,每走到一个节点都要判定下对方另一个人走到的节点是否和我对称,对称的条件就是左边的节点的值等于右边对称节点的值,左节点的左子节点和右节点的右子节点是对称的,左节点的右子节点和右节点的左子节点是对称的,一直递归的判断下去;

    满足两个条件可以一下子定义这个二叉树不对称:

    1,一个节点为NULL,另一个不为NULL;

    2,两个节点上的值不相等;

    当以上两个都不满足时会继续派分身往下走,它的左分身和对方的右分身要相互判定是否为对称,它的右分身与对方的左分身要相互判定是否是对称,具体代码如下

    class Solution {
    public:
        bool isSymmetric(TreeNode* root) {
            TreeNode* left_man = root;
            TreeNode* right_man = root;
            return SymmetricJudge(left_man, right_man);
        }
    
        bool SymmetricJudge(TreeNode* left_man, TreeNode* right_man) {
            if (left_man==NULL && right_man==NULL) {
                return true;
            }
            if (left_man==NULL||right_man==NULL) {
                return false;
            }
    
            if (left_man->val != right_man->val) {
                return false;
            }
    
            return SymmetricJudge(left_man->right, right_man->left) && SymmetricJudge(left_man->left, right_man->right);
        }
    
        
    };

    题目中让尝试用迭代的方式做一次,容我再想想

  • 相关阅读:
    session
    jQuery使用ajaxStart()和ajaxStop()方法
    animate 的另一种用法 , 案例 等
    Javascript 面向对象编程(一):封装
    用事件委托获取每一个LI的索引值 有问题
    正常事件绑定与事件委托绑定
    JS 总结
    关于选项卡, 每一个TAB 标签 背景不一样的处理方式
    页面加载时的 Loading 效果
    一个计时器, 点击按钮 让他 停一会, 5s后继续自动运行
  • 原文地址:https://www.cnblogs.com/rulin/p/13021719.html
Copyright © 2011-2022 走看看