美文网首页
29_对称的二叉树

29_对称的二叉树

作者: 是新来的啊强呀 | 来源:发表于2020-05-25 16:54 被阅读0次

要求:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如:二叉树 [1,2,2,3,4,4,3] 是对称的。但是这个 [1,2,2,null,3,null,3] 则不是镜像对称的。(层次遍历)

思路:
方法一:采用递归,首先根节点以及其左右子树。其次,左子树的左子树和右子树的右子树相同,左子树的右子树和右子树的左子树相同即可。

二叉树的对称g
// 使用递归
public class L29_isSymmetric {
    // 判断是否是对称二叉树主函数
    public boolean isSymmetric(TreeNode0 root){
        // 判断根节点的值是否为空,没有一个节点的二叉树,也是对称的
        if(root == null){
            return true;
        }
        // 开始进入递归的部分,每次加入两个节点
        return recur(root.left,root.right);
    }
    // 递归部分
    public boolean recur(TreeNode0 left, TreeNode0 right){
        // 如果传入的节点都为空,且这一层的节点都为空,那么这个二叉树是对称的
        if(left == null && right == null){
            return true;
        }
        // 仅有一个节点是不为空,那么这个二叉树一定不对称
        if(left==null||right==null||left.value==right.value){
            return false;
        }
        // 进入递归,左子树的左子树和右子树的右子,左子树的右子树和右子树的左子树组成一队。
        return recur(left.left,right.right) && recur(left.right,right.left);
    }
}

方法二:使用栈来保存成对节点。
1.出栈的时候也是成对的 ,
1.若都为空,继续;
2.一个为空,返回false;
3.不为空,比较当前值,值不等,返回false;
4.确定入栈顺序,每次入栈都是成对的,如left.left,right.right ; left.rigth,right.left

    public boolean isSymmetrical(TreeNode0 root){
        if(root==null)return true;
        Stack<TreeNode0> stack = new Stack<>();
        stack.add(root.left);
        stack.add(root.right);
        // 当栈为空时跳出循环
        while(!stack.isEmpty()){
            // 成对取出
            TreeNode0 right = stack.pop();
            TreeNode0 left = stack.pop();
            if(right==null&&left==null)return true;
            if(left==null||right==null||left.value==right.value)return false;
            // 成对插入
            stack.add(left.left);
            stack.add(right.right);
            stack.add(left.right);
            stack.add(right.left);
        }
        return true;
    }

相关文章

  • 29_对称的二叉树

    要求:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如:二叉树 ...

  • 【LeetCode】101-对称二叉树

    对称二叉树 题目 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的...

  • LeetCode-101-对称二叉树

    LeetCode-101-对称二叉树 101. 对称二叉树[https://leetcode-cn.com/pro...

  • 面试题28. 对称的二叉树

    对称的二叉树 题目描述 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称...

  • 剑指offer | 对称二叉树

    对称二叉树 请实现一个函数,用来判断一棵二叉树是不是对称的如果一棵二叉树和它的镜像一样,那么它是对称的 分析:根据...

  • 2019-04-09 BFS广度优先搜索刷题Day1

    Leetcode 101 对称二叉树 题目描述: 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2...

  • 第九天的leetcode刷题

    今天的题目是判断是否为对称二叉树:101. 对称二叉树[https://leetcode-cn.com/probl...

  • 每周 ARTS 第 8 期

    1. Algorithm 101. 对称二叉树(简单) 描述: 给定一个二叉树,检查它是否是镜像对称的。 示例: ...

  • Swift 对称二叉树 - LeetCode

    题目: 对称二叉树 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对...

  • LeetCode 101. 对称二叉树 | Python

    101. 对称二叉树 题目 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3]...

网友评论

      本文标题:29_对称的二叉树

      本文链接:https://www.haomeiwen.com/subject/ggfcahtx.html