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));
            
        }
    
    }
  • 相关阅读:
    树与树的表示
    队列的顺序/链式存储实现
    堆栈的链式存储实现
    堆栈的顺序存储实现
    线性表的链式存储求表长,查找,插入,删除
    C语言博客作业--函数
    C语言博客作业--嵌套循环
    C语言第三次博客作业---单层循环结构
    C语言第二次博客作业---分支结构
    C语言第一次博客作业——输入输出格式
  • 原文地址:https://www.cnblogs.com/moris5013/p/11066157.html
Copyright © 2011-2022 走看看