Programming

Leetcode-101. Symmetric Tree

Leetcode-101. Symmetric Tree

Given the root of a binary tree, check whether it is a mirror of itself (i.e., symmetric around its center).

Example 1:

image

Input: root = [1,2,2,3,4,4,3]
Output: true

Example 2:

image

Input: root = [1,2,2,null,3,null,3]
Output: false

<解題>

  1. 如果root==null,直接為ture,沒有的話用isSymmetricHelp一一檢查其左右子節點
  2. isSymmetricHelp: a. 左子樹 left 和右子樹 right 都為空,表示當前的節點的左右子樹均為空,即對稱性保持,返回 true。 b. 如果左子樹 left 和右子樹 right 中只有其中一個為空,而另一個不為空,表示左右子樹的結構不對稱,返回 false。 c. return isSymmetricHelp(left.left, right.right) && isSymmetricHelp(left.right, right.left);

public boolean isSymmetric(TreeNode root) {
    return root==null || isSymmetricHelp(root.left, root.right);
}

private boolean isSymmetricHelp(TreeNode left, TreeNode right){
    if(left==null || right==null)
        return left==right;
    if(left.val!=right.val)
        return false;
    return isSymmetricHelp(left.left, right.right) && isSymmetricHelp(left.right, right.left);
}

Time: O(N) Space: O(H)