Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions leetcode3/최원준/1145. Binary Tree Coloring Game.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
#

'''
1. 아이디어 :
x 노드의 위치, x노드 위의 노드들의 합, x노드 왼쪽, 오른쪽 자식 노드들의 합을 비교합니다

2. 시간복잡도 :
O(n)

3. 자료구조/알고리즘 :
bfs

'''

# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def btreeGameWinningMove(self, root: TreeNode | None, n: int, x: int) -> bool:


def get_node_and_par_total(node: TreeNode):
if node.val == x:
return node, 0

par_total = 0
x_node = None

queue = deque()
queue.append(node)

while queue:
par = queue.popleft()
if par == None: continue

if par.val == x:
x_node = par
else:
par_total += 1
queue.append(par.left)
queue.append(par.right)

return x_node, par_total

def get_child_value(node: TreeNode):
total = 0
if not node:
return total

queue = deque()
queue.append(node)

while queue:
child = queue.popleft()
if not child: continue

total += 1
queue.append(child.left)
queue.append(child.right)
return total

x_node, par_total = get_node_and_par_total(root)
left_total = get_child_value(x_node.left)
right_total = get_child_value(x_node.right)

return par_total > n - par_total or left_total > n - left_total or right_total > n - right_total


53 changes: 53 additions & 0 deletions leetcode3/최원준/572. Subtree of Another Tree.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isSubtree(self, root: TreeNode | None, subRoot: TreeNode | None) -> bool:

def get_num_list(node: TreeNode):
num_list = []

queue = deque()
queue.append(node)

while queue:
curr = queue.popleft()
if not curr:
continue

num_list.append(curr.val)
queue.append(curr.left)
queue.append(curr.right)
return num_list

queue = deque()
queue.append(root)
root_start_nodes = []

while queue:
curr = queue.popleft()
if not curr: continue
if curr.val == subRoot.val:
root_start_nodes.append(curr)
queue.append(curr.left)
queue.append(curr.right)

root_list = get_num_list(root_start_node)
sub_root_lists = []
for nodes in root_start_nodes:
sub_root_lists.append(get_num_list(subRoot))

ans = False
for sub_root_list in sub_root_lists:
if len(root_list) != len(sub_root_list):
continue
for i in range(len(root_list)):
if root_list[i] != sub_root_list[i]:
break


return ans

Loading