두 갈래 나무 - 대칭 두 갈래 나무

1504 단어

제목:


두 갈래 나무를 정해서 거울이 대칭적인지 확인하세요.
예를 들어 두 갈래 나무[1,2,2,3,4,3]는 대칭적이다.
   1
   / \
  2   2
 / \ / \
3  4 4  3

그러나 아래 이것[1,2,2,null,3,null,3]은 거울의 대칭이 아니다.
    1
   / \
  2   2
   \   \
   3    3

생각:

  • 두 갈래 나무에 대해 뿌리 결점부터 두루 훑어본다
  • 만약 좌우 결점이 모두 비어 있지 않지만 같지 않다면 틀림없이 대칭 두 갈래 나무가 아닐 것이다
  • 좌우 결점에 NULL이 있다면 대칭 두 갈래 나무가 아닐 것이다
  • 만약에 좌우 자결점이 모두 비어 있지 않고 같지 않다면: 왼쪽 자나무를 두루 다니고, 두루 다니기 순서는 현재 결점, 왼쪽 자나무, 오른쪽 자나무를 두루 다니고, 두루 다니기 순서는 현재 결점, 오른쪽 자나무, 왼쪽 자나무이다
  • 왼쪽 나무를 훑어보는 서열이 오른쪽 나무를 훑어보는 서열과 같다면, 이 두 갈래 나무는 대칭적인 두 갈래 나무이다.(차례로 실현)
  • /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public boolean isSymmetric(TreeNode root) {
            if (root == null) {
                return true;
            }
            
            return isSymmetricCore(root.left, root.right);
        }
        
        private boolean isSymmetricCore(TreeNode left, TreeNode right) {
            if (left == null && right == null) {
                return true;
            }
            if (left == null || right == null) {
                return false;
            }
            
            if (left.val == right.val) {
                return isSymmetricCore(left.left, right.right) && isSymmetricCore(left.right, right.left);
            }
            return false;   
        }
        
    }
    

    좋은 웹페이지 즐겨찾기