이진트리가 주어졌을 때 이를 역전시켜라 ( 좌 우를 )
(50)
leaf node 바로 위 노드부터 시작 ( level 이 depth -1 인 노드에 도달 ) 하여
좌우를 swap한다.
내가 고민했던 부분이 아래그림과 같았는데
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null) return root;
dfs(root);
return root;
}
// -1 -> null
// Otherwise -> 1
public int dfs(TreeNode cur){
// 현재 노드가 null인 경우
if(cur == null) return -1;
int left = dfs(cur.left);
int right = dfs(cur.right);
// 현재 노드가 leaf 노드인 경우
if(left == -1 && right == -1) return 1;
// Otherwise
if(left != -1 || right != -1){
// left child, right child 자체를 swap
TreeNode temp = cur.left;
cur.left = cur.right;
cur.right = temp;
}
return 1;
}
}
처음 안 거
python에서 다음 줄에 instruction 작성하려면 “\” 를 쓰면 된다고 함
class Solution(object):
def invertTree(self, root):
"""
:type root: TreeNode
:rtype: TreeNode
"""
# 위 -> 아래로 내려가는 방식
if root is None:
return None
root.left,root.right = \
self.invertTree(root.right),self.invertTree(root.left)
return root
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def invertTree(self, root):
"""
:type root: TreeNode
:rtype: TreeNode
"""
q = collections.deque([root])
while q:
node = q.popleft()
# 위 -> 아래
if node:
node.left,node.right = node.right,node.left
q.append(node.left)
q.append(node.right)
return root