ALGORITHM/Java algorithm

[Java][LeetCode][Blind75] 226. Invert Binary Tree | Easy | Tree | Recursion

호이호이호잇 2024. 5. 7. 07:30
728x90
반응형

문제 / 예제 / 제한조건 : 

 

풀이

내가 생각한 리커전을 끝내는 조건은 

1. 현재 노드가  null인 경우 -> 끝

2. 현재 노드의 좌/우 가 모두 null인 경우 -> 끝

 

이 두조건에 해당하지 않는 경우

1. 현재 노드의 좌/우 를 바꿔준다 

2. 현재 노드의 좌/우 로 현재 노드를 변경하여 리커전

 

코드로 확인해보면

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode invertTree(TreeNode root) {
        invertTreeHelper(root);   
        return root;
    }
    
    private void invertTreeHelper(TreeNode node) {
    	// 1. 현재 노드가 null인 경우
        if(node == null) return;
        
        // 2. 현재 노드의 좌/우 노드가 null 인 경우
        if(node.left == null && node.right == null) return;
        
        // 두 조건에 해당 하지 않는 경우에는
        // 좌/우 노드 변경
        TreeNode temp = node.left;
        node.left = node.right;
        node.right = temp;
        
        // 현재 노드의 좌/우 노드로 리커전
        invertTreeHelper(node.left);
        invertTreeHelper(node.right);
    }
}
Time Complexity: O(n)
Space Complexity: O(n) in the worst case / O(log n) in balanced trees.

728x90
반응형