코딩 테스트 및 알고리즘/leetcode for google

leetcode : Reverse Odd Levels of Binary Tree

띠리링구 2022. 9. 19. 03:34

https://leetcode.com/problems/reverse-odd-levels-of-binary-tree/

 

간단하게 2번째, 4번째 등 짝수번째 레벨의 노드들 값을 뒤집어주는건데 (문제에선 루트를 레벨 0부터 보니까 2번째가 level1으로 홀수레벨이다) naive하게 if문을 써서 풀어도 되지만 사람들의 풀이를 보니까 비트연산자를 활용하는거보고 나도 따라서 코딩했다.

 

class Solution:
    def reverseOddLevels(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        curOdd = 0
        curNodes = [root]
        
        while True:         
            if curOdd:
                for i in range(len(curNodes)//2):
                    tmp = curNodes[i].val
                    curNodes[i].val = curNodes[~i].val
                    curNodes[~i].val = tmp
                    
            if not curNodes[0].left:
                break
                    
            nextNodes = []
            for node in curNodes:
                nextNodes.append(node.left)
                nextNodes.append(node.right)
                
            curNodes = nextNodes
            curOdd = ~curOdd
        
        return root

 

~0이 -1과 같은걸 이용해 간단하게 코딩할 수 있다.