• 判断一个二叉树是不是对称二叉树


    /**
    *
    * 思路 :对称二叉树是关于中间轴对称的
    *
    * 从根节点出发,判断根节点是不是对称的,假如根节点对称(左节点的值和右节点的值相等),
    * 再判断左节点的左节点和右节点的右节点
    * 左节点的右节点和右节点的左节点是不是对称的
    *
    * 本质是根据节点去找镜像点比较
    */

    /**
     * 
        *   思路  :对称二叉树是关于中间轴对称的
     *   
        *   从根节点出发,判断根节点是不是对称的,假如根节点对称(左节点的值和右节点的值相等),
        *   再判断左节点的左节点和右节点的右节点
        *   左节点的右节点和右节点的左节点是不是对称的
     *  
        *    本质是 根据节点去找镜像点比较
     */
    public class TreeSymmetric {
    
        public static boolean isSymmetric(TreeNode root) {
            if (root == null)
                return true;
            return isMirror(root.left, root.right);
        }
    
        public static boolean isMirror(TreeNode left , TreeNode right) {
            if (left == null && right == null)
                return true; // 两个都是null
            if (left == null || right == null)
                return false; // 有一个是null
            return left.val == right.val && isMirror(left.left, right.right) && isMirror(left.right, right.left); //递归
        }
    
        public static class TreeNode {
            int val;
            TreeNode left;
            TreeNode right;
            TreeNode(int x) {
                val = x;
            }
        }
    
        public static void main(String[] args) {
            TreeNode root = new TreeNode(20);
            root.left = new TreeNode(21);
            root.right = new TreeNode(21);
            root.left.left = new TreeNode(15);
            root.right.right = new TreeNode(15);
            root.left.right = null;
            root.right.left = null;
            System.out.println(isSymmetric(root));
            
        }
    
    }
  • 相关阅读:
    fastcgi(一)
    矩阵旋转运算(一)
    【10.9】multiprocessing多进程编程
    【10.8】多线程和多进程的比较
    【10.7】ThreadPoolExecutor线程池
    【10.6】线程同步--Semaphore 使用以及源码分析
    【10.5】线程同步--conditon 使用以及源码分析
    【10.4】线程同步--Lock、RLock
    【10.3】线程间通信--共享变量和Queue
    【10.2】多线程编程-threading
  • 原文地址:https://www.cnblogs.com/moris5013/p/11066157.html
Copyright © 2020-2023  润新知