当前位置: 首页 > 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
http://www.dtcms.com/a/9832.html

相关文章:

  • 摸鱼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机制
  • 手机销量分析案例
  • 服务器配置Huggingface并git clone模型和文件
  • 八大技术趋势案例(虚拟现实增强现实)
  • 芒果YOLOv5改进89:卷积SPConv篇,即插即用,去除特征图中的冗余,FLOPs 和参数急剧下降,提升小目标检测
  • 关于埃斯顿机器人安全区域不规则设置
  • FPGA之组合逻辑与时序逻辑
  • 2024年04月在线IDE流行度最新排名
  • 题解 -- 第六届蓝桥杯大赛软件赛决赛C/C++ 大学 C 组
  • 视频推拉流EasyDSS点播平台云端录像播放异常的问题排查与解决
  • mac 安装 pip,如果你的电脑已经有 python3
  • 网络套接字补充——TCP网络编程