• 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);
        }
    }
     
  • 相关阅读:
    cmd中删除、添加、修改注册表命令
    修改注册表使win server 2012R2开机进入桌面而不是开始界面
    win8.1/2012R2上面安装flash debugger
    ANT中的copy和move标签
    用maven在MANIFEST.MF文件中的Class-Path中增加当前目录(.)
    通过ANT生成MANIFEST.MF中的Class-Path属性
    Junit4进行参数化测试
    DbUnit入门实战
    oracle查看当前正在使用的数据库
    左偏树 P3377【模板】左偏树(可并堆)
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/10950471.html
Copyright © 2020-2023  润新知