首页 > 其他分享 >655. 输出二叉树(中)

655. 输出二叉树(中)

时间:2023-12-14 16:36:46浏览次数:30  
标签:node 输出 res 矩阵 height 655 二叉树 diff 节点

目录

题目

  • 给你一棵二叉树的根节点 root ,请你构造一个下标从 0 开始、大小为 m x n 的字符串矩阵 res ,用以表示树的 格式化布局 。构造此格式化布局矩阵需要遵循以下规则:

树的 高度 为 height ,矩阵的行数 m 应该等于 height + 1 。
矩阵的列数 n 应该等于 2的(height+1)次方 - 1 。
根节点 需要放置在 顶行 的 正中间 ,对应位置为 res[0][(n-1)/2] 。
对于放置在矩阵中的每个节点,设对应位置为 res[r][c] ,将其左子节点放置在 res[r+1][c-2的(height-r-1)次方] ,右子节点放置在 res[r+1][c+2的(height-r-1)次方] 。
继续这一过程,直到树中的所有节点都妥善放置。
任意空单元格都应该包含空字符串 "" 。
返回构造得到的矩阵 res 。

题解

class Solution:
    def printTree(self, root: Optional[TreeNode]) -> List[List[str]]:
        # 计算树的高度
        def dfs(node: TreeNode) -> int:
            return max(dfs(node.left), dfs(node.right)) + 1 if node else 0
        # 深度优先搜索遍历树,并填充二维列表
        def dfsTree(node: TreeNode, r: int, c: int):
            # 存储节点值到对应的位置
            ans[r][c] = str(node.val) #转成字符串
            # 计算当前行的偏移量
            diff = 2 ** (height - 2 - r)  
            # 处理左子节点
            if node.left:
                dfsTree(node.left, r + 1, c - diff)#左子结点列相较于中间向左偏移diff
            # 处理右子节点
            if node.right:
                dfsTree(node.right, r + 1, c + diff)#右子结点列相较于中间向右偏移diff
        # 计算树的高度
        height = dfs(root)
        # 初始化二维列表,用于存储节点值
        ans = [[""] * (2 ** height - 1) for _ in range(height)]  
        # 执行深度优先搜索,并填充二维列表
        dfsTree(root, 0, (len(ans[0]) - 1) // 2) #传入根节点、行号、中间列的索引
        # 返回填充好的二维列表
        return ans

标签:node,输出,res,矩阵,height,655,二叉树,diff,节点
From: https://www.cnblogs.com/lushuang55/p/17900532.html

相关文章

  • 第六节:二叉树详解
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......
  • 543. 二叉树的直径
    1.题目介绍给你一棵二叉树的根节点,返回该树的直径。二叉树的直径是指树中任意两个节点之间最长路径的长度。这条路径可能经过也可能不经过根节点\(root\)。两节点之间路径的长度由它们之间边数表示。示例1:输入:root=[1,2,3,4,5]输出:3解释:3,取路径[4,2,1,3]......
  • 101. 对称二叉树
    1.题目介绍给你一个二叉树的根节点\(root\),检查它是否轴对称。示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:false提示:树中节点数目在范围\([1,1000]\)内\(-100<=Node.val<=100\)进阶:你可以运用递归和迭代两种......
  • 226. 翻转二叉树
    1.题目介绍给你一棵二叉树的根节点\(root\),翻转这棵二叉树,并返回其根节点。示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]提示:树中节点数目范围在\([0,100]\)内\(-100<=Node.val......
  • 输入大写字母输出小写字母
    同个小写字母比大写的ascll值大32A-Z(65-90)a-z(97-122)#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ chari=0; charn=0; printf("请输入任意大写字母:>\n"); scanf("%c",&n); for(i=65;i<=90;i++) { if(i==......
  • JS输出当前周一到周日范围时间
    网上搜的都感觉好复杂,看不懂,自己写了个,存着。1//格式化时间2constformatTime=function(date){3constyear=date.getFullYear().toString();4constmonth=(date.getMonth()+1).toString().padStart(2,'0');//月份从0开始......
  • C++堆——heap与二叉树和python
    数据结构栈-->stack队列-->queue树-->tree堆-->heap散列-->hash图-->graph图结构一般包括顶点和边邻接矩阵DAG,DirectedAcyclicGraph即「有向无环图」树树(Tree)是一种非线性的数据结构,由n个节点组成,其中每个节点都有零个或多个子节点。......
  • 线索二叉树记录
                                       中序遍历:   BADCE 将树型结构转换为线性结构,每个结点都有直接前驱和直接后继。              ......
  • 通过PowerShellPlus示例脚本学习PowerShell之-输出SQLServer服务属性
    ##=====================================================================##Title:Get-MSSQL-ServerAttrib-Csv##Description:ConnecttoSQLServerandoutputserverattributestoCSV##Author:Idera##Date:1/28/2009##Input......
  • 力扣101-对称二叉树
    该题难度为【简单】1.尝试自己写,哪怕写个暴力解法也行,没写出来,看官方题解。2.扫了一眼,不太理解,又想了一会“我代码里漏掉的一半在官方思路中是怎么补上的”,再从头看一遍文字解析,“原来是两棵树对比”。这样思路就清晰了,用递归遍历每个节点,比较每次遍历的“根节点”即可。3.......