• php算法题---对称的二叉树


    php算法题---对称的二叉树

    一、总结

    一句话总结:

    可以在isSymmetrical()的基础上再加一个函数comRoot,函数comRoot来做树的递归判断
    /*思路:首先根节点以及其左右子树,左子树的左子树和右子树的右子树相同
    * 左子树的右子树和右子树的左子树相同即可,采用递归
    * 非递归也可,采用栈或队列存取各级子树根节点
    */
    public class Solution {
        boolean isSymmetrical(TreeNode pRoot)
        {
            if(pRoot == null){
                return true;
            }
            return comRoot(pRoot.left, pRoot.right);
        }
        private boolean comRoot(TreeNode left, TreeNode right) {
            // TODO Auto-generated method stub
            if(left == null) return right==null;
            if(right == null) return false;
            if(left.val != right.val) return false;
            return comRoot(left.right, right.left) && comRoot(left.left, right.right);
        }
    }

    1、对称的二叉树代码的注意点?

    左子树的左子树和右子树的右子树相同,左子树的右子树和右子树的左子树相同即可:return comRoot(left.right, right.left) && comRoot(left.left, right.right);
    判断两个节点相等不相等,先判断节点是否存在,存在的情况下判断值是否相等
    要明确实际模型中的对称:左子树的左子树和右子树的右子树相同,左子树的右子树和右子树的左子树相同
        private boolean comRoot(TreeNode left, TreeNode right) {
            // TODO Auto-generated method stub
            if(left == null) return right==null;
            if(right == null) return false;
            if(left.val != right.val) return false;
            return comRoot(left.right, right.left) && comRoot(left.left, right.right);
        }

    2、对称的二叉树 解题的思路?

    递归思路:首先根节点以及其左右子树,左子树的左子树和右子树的右子树相同,左子树的右子树和右子树的左子树相同即可,采用递归
    非递归思路:采用栈或队列存取各级子树根节点

    3、树如果非递归来做,保存遍历节点最好的方式是什么?

    用栈而不是用数组:比如在这题(对称的二叉树)中用栈就方便比较左右子树节点是否相同

    二、内容在总结中

    1、题目描述

    请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

    2、代码

    /*思路:首先根节点以及其左右子树,左子树的左子树和右子树的右子树相同
    * 左子树的右子树和右子树的左子树相同即可,采用递归
    * 非递归也可,采用栈或队列存取各级子树根节点
    */
    public class Solution {
        boolean isSymmetrical(TreeNode pRoot)
        {
            if(pRoot == null){
                return true;
            }
            return comRoot(pRoot.left, pRoot.right);
        }
        private boolean comRoot(TreeNode left, TreeNode right) {
            // TODO Auto-generated method stub
            if(left == null) return right==null;
            if(right == null) return false;
            if(left.val != right.val) return false;
            return comRoot(left.right, right.left) && comRoot(left.left, right.right);
        }
    }
     
  • 相关阅读:
    每日英语:Surviving a Conference Call
    每日英语:Boost Your Balance; Avoid Falls
    每日英语:Proactive Advice for Dealing With Grief: Seek Out New Experiences
    每日英语:Tencent Fights for China's Online Shoppers
    每日英语:5 Things to Know About Missing Malaysia Airlines Flight and Air Safety
    每日英语:Does China Face a Reading Crisis?
    每日英语:Six Ways to Modernize Your Car
    每日英语:Welcome to the Global Middle-Class Surge
    阿里巴巴 Sentinel + InfluxDB + Chronograf 实现监控大屏
    SpringBoot 2.0 + InfluxDB+ Sentinel 实时监控数据存储
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/10950471.html
Copyright © 2020-2023  润新知