LeetCode 集錦(二十二) - 第 101 題 Symmetric Tree

問題

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.
複製代碼

翻譯:

給定一個二叉樹,檢查它是不是自身的鏡像(即圍繞其中心對稱)。 例如,這個二叉樹[1,2,2,3,4,4,3]是對稱的:git

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

複製代碼

可是下面的[1,2,2,null,3,null,3]不是:github

1
  / \
 2   2
  \   \
  3    3
複製代碼

注意: 若是你能遞歸地和迭代地解出它,那就更好了。bash


解題思路

本題判斷兩個樹是否鏡像樹,鏡像樹的特色,在於它的左節點和右節點是同樣的,根據這個特色咱們能夠解決這個問題。ui

解題方法

  1. 按照思路代碼以下this

    public boolean isSymmetric(TreeNode root) {
         if (root == null) {
             return true;
         }
    
         return isSymmetric(root.left, root.right);
    
     }
    
     public boolean isSymmetric(TreeNode left, TreeNode right) {
    
         if (left == null && right == null) {
             return true;
         }
    
         boolean isSame = left == null;
         isSame = isSame ? false : right != null && left.val == right.val;
    
         return isSame && isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
    
     }
    
    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
    
        TreeNode(int x) {
            val = x;
        }
    }
    
    複製代碼

    時間複雜度: 該方案用了遞歸遍歷樹,不要判斷時間複雜度,並且樹的遍歷複雜度都說很差,且記爲 O(n)spa

    空間複雜度: 該方案使用了沒有使用額外空間,因此空間複雜度是 O(n)=O(1);翻譯

總結

本題的大體解法如上所訴,按照特色咱們能夠很簡單的解決這個問題,其實也能夠按層進行對比,判斷每一層是否鏡像,能夠用隊列來解決。code

歡迎關注個人博客-FightCrap遞歸

相關文章
相關標籤/搜索