当前位置: 首页 > news >正文

【Python】记录槽位法:Leetcode 894. 所有可能的真二叉树

描述

给你一个整数 n ,请你找出所有可能含 n 个节点的 真二叉树 ,并以列表形式返回。答案中每棵树的每个节点都必须符合 Node.val == 0 。

答案的每个元素都是一棵真二叉树的根节点。你可以按 任意顺序 返回最终的真二叉树列表。

真二叉树 是一类二叉树,树中每个节点恰好有 0 或 2 个子节点。

示例 1:
在这里插入图片描述

输入:n = 7
输出:[[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,null,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,null,null,null,null,0,0],[0,0,0,0,0,null,null,0,0]]

示例 2:
输入:n = 3
输出:[[0,0,0]]

思路

一开始看错返回类型了,以为是返回字符串,因此思路也受到了影响

大概就是字符串,或者说是一个栈,如同题目所描述的输出一样,表示一个二叉树。其可以添加进结点或者Null,同时记录“槽位”数量,当槽位不足时则返回,否则当结点数量满足要求时返回这个树的结果。由于一次必定添加两个结点或者Null,因此可以只添加一个值便可区分,然后再通过队列将层序形式的树结点串构造成对应的二叉树。
枚举有效的二叉树使用dfs。

代码

class Solution:
    def allPossibleFBT(self, n: int) -> List[Optional[TreeNode]]:
        #print(n)
        if(n%2 == 0): return []
        tree = []
        self.all_tree = []
        self.n = n

        self.dfs(tree)
        return self.all_tree
    
    def dfs(self,tree,node_num = 1,remain_slot = 2):
        if(remain_slot <= 0): return
        if(node_num == self.n):
            self.all_tree.append(self.createTree(tree))
            return

        tree.append(0)
        self.dfs(tree,node_num+2,remain_slot+2)
        tree.pop()
        tree.append(None)
        self.dfs(tree,node_num,remain_slot-2)
        tree.pop()
    
    @staticmethod
    def createTree(tree_arr):
        tree = TreeNode(0)
        node_q = deque()
        node_q.append(tree)
        for node in tree_arr:
            if(node == None):
                node_q.popleft()
                continue
            else:
                temp_node = node_q[0]
                temp_node.left = TreeNode(0)
                temp_node.right = TreeNode(0)
                node_q.append(temp_node.left)
                node_q.append(temp_node.right)
                node_q.popleft()
        return tree

相关文章:

  • 摸鱼toyaml.com更新
  • udhcpc 获取不到ip地址
  • 【教学类-09-07】20240401细线迷宫图02+箭头图片(A4横版一页-2份竖版)
  • C++ 哈希思想应用:位图,布隆过滤器,哈希切分
  • 分布式唯一ID 雪花算法
  • 分享一个Python爬虫入门实例(有源码,学习使用)
  • 3D数据格式导出工具HOOPS Publish如何生成高质量3D PDF?
  • 使用mysql官网软件包安装mysql
  • GIT新建远程分支的操作过程
  • 京东云明修“价格战”,暗渡“政企云”
  • 数据结构:链表的双指针技巧
  • iOS苹果签名共享签名是什么以及如何获取?
  • Permission Denial: package=android does not belong to uid=2000
  • 6个黑科技网站,永久免费
  • 工艺品wordpress外贸主题
  • vscode连接不上,终端ssh正常,一直输入密码正确但是无法登录
  • 分布式理论:CAP理论 BASE理论
  • 【力扣】80.删除有序数组中的重复项Ⅱ
  • Android Fence机制
  • 手机销量分析案例
  • 3:0战胜日本队,中国羽毛球队挺进2025苏迪曼杯决赛
  • 滨江集团:一季度营收225.07亿元,净利润9.75亿元
  • 这就是上海!
  • 宋徽宗《芙蓉锦鸡图》亮相,故宫首展历代动物绘画
  • 160名老人报旅行团被扔服务区?张家界官方通报
  • 昂立教育:去年减亏1.39亿元,今年以“利润持续增长”为核心目标