zoukankan      html  css  js  c++  java
  • 判断一个二叉树是不是对称二叉树

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

    /**
     * 
        *   思路  :对称二叉树是关于中间轴对称的
     *   
        *   从根节点出发,判断根节点是不是对称的,假如根节点对称(左节点的值和右节点的值相等),
        *   再判断左节点的左节点和右节点的右节点
        *   左节点的右节点和右节点的左节点是不是对称的
     *  
        *    本质是 根据节点去找镜像点比较
     */
    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));
            
        }
    
    }
  • 相关阅读:
    输入/输出的格式和方法
    程序编译运行和exe运行之文件位置的区别
    ZOJ_3950_How Many Nines 解题报告及如何对程序进行测试修改
    [Offer收割]编程练习赛13 解题报告
    查找语言自带函数
    codeblocks下的汇编语言
    hiho一下 第144周(机会渺茫)解题报告及拓展
    关闭调试窗口快捷方式
    编写程序一个位置的快速到达和修改
    poj3660(Cow Contest)解题报告
  • 原文地址:https://www.cnblogs.com/moris5013/p/11066157.html
Copyright © 2011-2022 走看看