zoukankan      html  css  js  c++  java
  • 101. Symmetric Tree

    一、题目

      1、审题

      2、分析

        给出一棵二叉树,判断其是否对称。

    二、解答

      1、思路:

        方法一、

          每次递归判断根节点的左孩子与根节点的右孩子是否相等。

      

    public boolean isSymmetric(TreeNode root) {
            if(root == null)
                return true;
            return isSymmetric(root.left, root.right);
        }
    
        
        private boolean isSymmetric(TreeNode left, TreeNode right) {
            
            if(left == null && right == null)
                return true;
            if(left == null || right == null)
                return false;
            
            return left.val == right.val && (isSymmetric(left.right, right.left))
                                         && (isSymmetric(left.left, right.right));
        }

      

      方法二、

        新建一个栈空间,根节点的左孩子与根节点的右孩子同时入栈,出栈时出两个栈顶元素,判断其值是否相等。

        若相等,在入根左孩子的左孩子与根右孩子的右孩子,在入栈根左孩子的右孩子与根右孩子的左孩子。

        若栈不为空,再出两个栈顶元素进行判断。

     public boolean isSymmetric(TreeNode root) {
            if(root == null)
                return true;
            
            Stack<TreeNode> stack = new Stack<>();
            TreeNode left, right;
            
            if(root.left != null) {
                if(root.right == null)
                    return false;
                stack.push(root.left);
                stack.push(root.right);
            }
            else if(root.right != null)
                return false;
            
            while(!stack.isEmpty()) {
                if(stack.size() % 2 != 0)
                    return false;
                
                right = stack.pop();
                left = stack.pop();
                if(right.val != left.val)
                    return false;
                
                if(left.left != null) {
                    if(right.right == null)
                        return false;
                    stack.push(left.left);
                    stack.push(right.right);
                }
                else if(right.right != null)
                    return false;
                
                if(left.right != null) {
                    if(right.left == null)
                        return false;
                    stack.push(left.right);
                    stack.push(right.left);
                }
                else if(right.left != null)
                    return false;
            }
            
            return true;
        }
  • 相关阅读:
    Xshell的一些使用方法和注意事项
    adobe premiere pro cc2015.0已停止工作 解决办法
    视频播放效果--video.js播放mp4文件
    centos 7.0 编译安装php 7.0.3
    centos 7.0 安装nginx 1.9.10
    centos 7.0 firewall 防火墙常用命令
    webstorm 更改默认服务器端口
    css3 动画效果 定义和绑定执行
    css 图片垂直居中总结
    JS 面向对象随笔
  • 原文地址:https://www.cnblogs.com/skillking/p/9718375.html
Copyright © 2011-2022 走看看