Skip to content

Commit ecbc84c

Browse files
authored
Create 894. All Possible Full Binary Trees.py
1 parent cf2a867 commit ecbc84c

1 file changed

Lines changed: 57 additions & 0 deletions

File tree

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#
2+
3+
'''
4+
1. 아이디어 :
5+
backtracking으로 왼쪽과 오른쪽 브랜치에 각각 몇개의 노드가 들어갈지 매번 계산한다.
6+
7+
2. 시간복잡도 :
8+
O(2^n)
9+
10+
3. 자료구조/알고리즘 :
11+
backtracking
12+
13+
'''
14+
# Definition for a binary tree node.
15+
# class TreeNode:
16+
# def __init__(self, val=0, left=None, right=None):
17+
# self.val = val
18+
# self.left = left
19+
# self.right = right
20+
class Solution:
21+
def allPossibleFBT(self, n: int) -> List[Optional[TreeNode]]:
22+
23+
# def copy_tree(original_node):
24+
# if not original_node:
25+
# return
26+
27+
# copied = TreeNode(0)
28+
# copied.left = copy_tree(original_node.left)
29+
# copied.right = copy_tree(original_node.right)
30+
31+
# return copied
32+
33+
34+
def backtrack(nodes):
35+
36+
if nodes == 1:
37+
return [TreeNode(0)]
38+
39+
trees = []
40+
for left_count in range(1, nodes-1, 2):
41+
right_count = nodes - 1 - left_count
42+
43+
left_trees = backtrack(left_count)
44+
right_trees = backtrack(right_count)
45+
46+
for left_tree in left_trees:
47+
for right_tree in right_trees:
48+
root = TreeNode(0)
49+
root.left = left_tree
50+
root.right = right_tree
51+
52+
trees.append(root)
53+
return trees
54+
55+
return backtrack(n)
56+
57+

0 commit comments

Comments
 (0)