美文网首页
Leetcode 101 Symmetric Tree -Jav

Leetcode 101 Symmetric Tree -Jav

作者: Mereder | 来源:发表于2019-04-07 16:19 被阅读0次

    题目描述

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

    For example, this binary tree [1,2,2,3,4,4,3] is symmetric:

        1
       / \
      2   2
     / \ / \
    3  4 4  3
    

    But the following [1,2,2,null,3,null,3] is not:

        1
       / \
      2   2
       \   \
       3    3
    

    Note:
    Bonus points if you could solve it both recursively and iteratively.

    解题思路

    (...往往能想到正确思路 然后 细想就不知道怎么搞了)

    递归

    递归的话,就是递归判断root 的左右子树是否为 对称,但是当时想的就在一个函数上递归解决,后来发现,不可以,所以只能再写一个函数,专门来进行递归。其实判断是否对称的过程 就是 判断是否相等的过程,只不过这个相等 是需要看好 结点位置的。

    对于这个对称来说,left = right 而下一层 就需要

     left.left == right.rifht  && left.right = right.left
    

    (单对一棵子树分析,比如left 实际上就是实现了left的 前序遍历先取left的值与right比较 再 left.left 然后 left.right 单对right分析也是如此,只不过遍历顺序是先右再左)

    非递归

    借助栈来实现,同时压栈 同时出栈,注意压栈和出栈顺序即可。

    (还没实现 实现了就贴上来)

    题解

    递归
        public boolean isSymmetric(TreeNode root) {
            if(root.left == null || root.right == null )
                return root.left == root.right;
            return isSymmetric(root.left,root.right);
    
        }
        public boolean isSymmetric(TreeNode left,TreeNode right){
            if (left == null || right == null)
                return left == right;
            if (left.val != right.val) return false;
            return isSymmetric(left.left,right.right) && isSymmetric(left.right,right.left);
        }
    
    非递归(未完)

    相关文章

      网友评论

          本文标题:Leetcode 101 Symmetric Tree -Jav

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