- 子集树可以认为是集合S分别对于每个元素进行选用操作而构成的二叉树,其叶节点为2^n个,其中n为集合S的元素个数。
- 根据上述思路,其基本的代码框架如下所示。经过Leetcode测试,该框架实用性较好,但是算法效率比其他相同的算法(指回溯法的其他写法)要慢。
# nums为上述集合S,res为记录符合要求的集合
# path记录元素组合的路径,当符合要求则加入到res中
# step为遍历深度
# 在代码开始位置去讨论是否达到了遍历深度
# 在决定是否加入该元素部分,讨论是否需要继续加入元素进行遍历
# 以下框架实现查找非重复子集树
def dfs(self,nums,res,path,step):
if step==len(nums):
if path not in res:
res.append(path.copy())
return
else:
# 决定不加入nums[step]元素
self.dfs(nums,res,path,step+1)
# 决定加入nums[step]元素
path.append(nums[step])
self.dfs(nums,res,path,step+1)
path.pop()