zoukankan      html  css  js  c++  java
  • 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);
        }
    }
     
  • 相关阅读:
    WebApi 安全认证
    Autofac 学习
    autofac实现批量注入
    Autofac -入门练习
    Struts2 Namespace_命名空间
    Deployment failure on Tomcat 6.x. Could not copy all resources
    chm 已取消到该网页的导航 或者 无法显示网页 的问题
    GPT 分区详解
    mount 中文手册
    rpm 中文手册
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/10950471.html
Copyright © 2011-2022 走看看