【LeetCode题目记录-11】判断二叉树是否是镜像的(对称的)

Symmetric Tree

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

For example, this binary tree is symmetric:

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

But the following is not:

    1
   / \
  2   2
   \   \
   3    3

Note:

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

confused what "{1,#,2,3}" means? >
read more on how binary tree is serialized on OJ.

【分析1-原创】采用递归方案,查看了参考才搞定。

参考:https://oj.leetcode.com/discuss/456/recusive-solution-symmetric-optimal-solution-inordertraversal

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

【分析2-非原创】用stack对左右进行进stack,然后每一层进行比较。

参考:https://oj.leetcode.com/discuss/456/recusive-solution-symmetric-optimal-solution-inordertraversal

 public boolean isSymmetric(TreeNode root) {
        // IMPORTANT: Please reset any member data you declared, as
        // the same Solution instance will be reused for each test case.
        if (root == null)
            return true;
        Stack<TreeNode> s1 = new Stack<TreeNode>();
        Stack<TreeNode> s2 = new Stack<TreeNode>();
        s1.push(root.left);
        s2.push(root.right);
        while (!s1.empty() && !s2.empty()) {
            TreeNode n1 = s1.pop();
            TreeNode n2 = s2.pop();
            if (n1 == null && n2 == null)
                continue;
            if (n1 == null || n2 == null)
                return false;
            if (n1.val != n2.val)
                return false;
            s1.push(n1.left);
            s2.push(n2.right);
            s1.push(n1.right);
            s2.push(n2.left);
        }
        return true;
    }
时间: 2024-09-29 19:43:04

【LeetCode题目记录-11】判断二叉树是否是镜像的(对称的)的相关文章

【LeetCode题目记录-5】二叉树是否相同

Same Tree Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if they are structurally identical and the nodes have the same value. [分析1-原创]递归判断 /** * Definition for binary tree * public c

LeetCode:Symmetric Tree - 判断二叉树是否对称

1.题目名称 Symmetric Tree(判断二叉树是否对称) 2.题目地址 https://leetcode.com/problems/symmetric-tree/ 3.题目内容 英文:Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). 中文:给定一颗二叉树,检查它是否与自己的镜像是同一棵树(即围绕根节点对称). 4.解题方法 本题与题目"Same Tr

【LeetCode题目记录-2】从前序遍历和中序遍历构建二叉树

Construct Binary Tree from Preorder and Inorder Traversal Given preorder and inorder traversal of a tree, construct the binary tree. Note: You may assume that duplicates do not exist in the tree. [分析1-非原创]递归调用. 参考:http://bylijinnan.iteye.com/blog/135

【LeetCode题目记录-7】为完全二叉树添加层指针

Populating Next Right Pointers in Each Node Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } Populate each next pointer to point to its next right node. If there is no next right node, the next

【LeetCode题目记录-10】已排序的数组去除重复元素

Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this in place with constant memory.

【LeetCode题目记录-4】插入数组间隔问题

Insert Interval Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary). You may assume that the intervals were initially sorted according to their start times. Example 1: Given intervals [1,3],[6,9], i

【LeetCode题目记录-9】排序后的数组生成平衡的二叉搜索树

Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending order, convert it to a height balanced BST. [分析1-原创]中间值作为根节点,左边的中间值作为左孩子,右边的中间值作为右孩子.一直递归探底即可. /** * Definition for binary tree * public class TreeNode {

【LeetCode题目记录-13】二分搜索排序后的二维数组

Search a 2D Matrix Writean efficient algorithm that searches for a value in an m x n matrix.This matrix has the following properties: Integers in each row are sorted from left to right. The first integer of each row is greater than the last integer o

【LeetCode题目记录-6】1~n作为key可以有多少种二叉搜索树(BST)的形式

Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For example, Given n = 3, there are a total of 5 unique BST's. 1         3     3      2      1 \       /     /      / \      \ 3