leetcode 655. 输出二叉树(java)

news2025/1/8 19:07:39

输出二叉树

  • 题目描述
    • 代码演示

题目描述

难度 - 中等
leetcode 655. 输出二叉树

给你一棵二叉树的根节点 root ,请你构造一个下标从 0 开始、大小为 m x n 的字符串矩阵 res ,用以表示树的 格式化布局 。构造此格式化布局矩阵需要遵循以下规则:
树的 高度 为 height ,矩阵的行数 m 应该等于 height + 1 。
矩阵的列数 n 应该等于 2height+1 - 1 。
根节点 需要放置在 顶行 的 正中间 ,对应位置为 res[0][(n-1)/2] 。
对于放置在矩阵中的每个节点,设对应位置为 res[r][c] ,将其左子节点放置在 res[r+1][c-2height-r-1] ,右子节点放置在 res[r+1][c+2height-r-1] 。
继续这一过程,直到树中的所有节点都妥善放置。
任意空单元格都应该包含空字符串 “” 。
返回构造得到的矩阵 res 。

示例1:
在这里插入图片描述输入:root = [1,2]
输出:
[[“”,“1”,“”],
[“2”,“”,“”]]

示例2:
在这里插入图片描述输入:root = [1,2,3,null,4]
输出:
[[“”,“”,“”,“1”,“”,“”,“”],
[“”,“2”,“”,“”,“”,“3”,“”],
[“”,“”,“4”,“”,“”,“”,“”]]

提示:
树中节点数在范围 [1, 210] 内
-99 <= Node.val <= 99
树的深度在范围 [1, 10] 内

在这里插入图片描述## 递归

根据题意,我们可以先设计 dfs1 递归函数得到树的高度 h,以及与其相关的矩阵行列大小(并初始化矩阵)。
随后根据填充规则,设计 dfs2 递归函数往矩阵进行填充。

代码演示

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int h,m,n;
    List<List<String>> ans;
    public List<List<String>> printTree(TreeNode root) {
        dfsH(root,0);
        m = h + 1;
        n = (1 << (h + 1)) - 1;
        ans = new ArrayList<>();
        //填充值
        for(int i = 0; i < m;i++){
            List<String> tmp = new ArrayList<>();
            for(int j = 0; j < n;j++){
               tmp.add("");     
            }
            ans.add(tmp);
        }
        dfsF(root,0,n / 2);
        return ans;
    }
		//DFS 计算树的高度
    void dfsH(TreeNode root,int depth){
        if(root == null){
            return ;
        }
        h = Math.max(h,depth);
        dfsH(root.left,depth + 1);
        dfsH(root.right,depth + 1);

    }
    //填充值
    void dfsF(TreeNode root,int r,int c){
        if(root == null){
            return;
        }
        ans.get(r).set(c,""+root.val);
        dfsF(root.left,r + 1,c - (1 << (h - r - 1)));
        dfsF(root.right,r + 1,c +  (1 << (h - r - 1)));
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/979202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【报错】 Cannot create property ‘showColumn‘ on number ‘-1‘

1、报错原因&#xff1a; 代码如下&#xff1a; 报错是因为&#xff1a;this.findObject(this.option.column, "thirdId")是一个number &#xff0c;没有.showColumn属性 2、修改代码 将其变成object属性就行了

智慧工厂的未来:数字孪生的多重应用

数字孪生技术在智慧工厂项目中具有广泛的应用&#xff0c;为生产制造提供了前所未有的机会和优势。下面将探讨数字孪生技术在智慧工厂项目中的多个应用场景。 数字孪生技术的首要应用之一是生产流程优化。通过将现实世界的工厂映射到数字孪生模型中&#xff0c;制造商可以模拟…

apex应用程序创建和对比

创建一个应用程序290&#xff0c;功能全不选展现出来的效果&#xff1a; 对比勾选了功能的应用程序少了很多内容 那看来该勾选还得勾选&#xff0c;删除之前的之后重新创建了一个应用程序290 自己跟着做应用 搜索栏下拉选择部门 在数据库使用sql语句查询&#xff0c;在数据库中…

文字转语音TTS bark SpeechT5 mms

bark GitHub - suno-ai/bark: &#x1f50a; Text-Prompted Generative Audio Model microsoft SpeechT5 https://github.com/microsoft/SpeechT5 使用 SpeechT5 进行语音合成、识别和更多功能 - 掘金 Facebook mms https://github.com/facebookresearch/fairseq/tree/mai…

vue使用百度地图实现地点查询

效果 代码 首先在index.html中引入script&#xff1a; <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width,initial-scal…

DC电源模块过压保护功能介绍

BOSHIDA DC电源模块过压保护功能介绍 DC电源模块&#xff08;也叫直流电源模块&#xff09;是一种常见的设备&#xff0c;它可以将交流电转换为直流电&#xff0c;用于供电给各种电子设备。DC电源模块通常具有多种保护功能&#xff0c;其中过压保护是其中一项重要的保护功能。…

Spring boot +Thymeleaf 本地图片加载失败(图片路径)的问题及解决方法

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 前言 在Spring Boot应用程序中&#xff0c;有时候我们会遇到本地图片不…

前后端数据加密传输基于AES+RSA实现

前后端数据加密传输基于AESRSA实现 什么是AES和RSA AES AES&#xff08;Advanced Encryption Standard&#xff09;是一种对称加密算法&#xff0c;它的加密速度快&#xff0c;安全性也比较高&#xff0c;是目前广泛使用的加密算法之一。AES的密钥长度可以选择128位、192位和…

腾讯云新用户云服务器特惠价格表(2023年)

腾讯云作为国内领先的云计算服务提供商&#xff0c;一直致力于为全球用户提供稳定、安全、高效的云计算服务。对于新用户而言&#xff0c;腾讯云提供了多种特惠的云服务器套餐&#xff0c;以满足不同用户的需求。 1、轻量应用服务器 腾讯云的轻量应用服务器提供了高性价比的解决…

Java 大文件排序

大文件排序 http://en.wikipedia.org/wiki/Merge_sort http://en.wikipedia.org/wiki/External_sorting 外排序 通常来说&#xff0c;外排序处理的数据不能一次装入内存&#xff0c;只能放在读写较慢的外存储器&#xff08;通常是硬盘&#xff09;上。 外排序通常采用的是…

Oracle数据库概念简介

1. 数据库 一般意义上的数据库包含两个部分 库&#xff1a;就是一个存储一堆文件的文件目录数据库管理系统&#xff1a;管理库的系统 2. DBMS 数据库管理系统 数据库管理系统(Database Management System)&#xff0c;是一种操纵和管理数据库的大型软件&#xff0c;用于建立…

vue中v-for循环数组使用方法中splice删除数组元素(每次都删掉点击的下面的一项)

总结&#xff1a;平常使用v-for的key都是使用index&#xff0c;这里vue官方文档也不推荐&#xff0c;这个时候就出问题了&#xff0c;我们需要key为唯一标识&#xff0c;这里我使用了时间戳&#xff08;new Date().getTime()&#xff09;处理比较复杂的情况&#xff0c; 本文章…

mac安装adobe需要注意的tips(含win+mac all安装包)

M2芯片只能安装2022年以后的&#xff08;包含2022年的&#xff09; 1、必须操作的开启“任何来源” “任何来源“设置&#xff0c;这是为了系统安全性&#xff0c;苹果希望所有的软件都从商店或是能验证的官方下载&#xff0c;导致默认不允许从第三方下载应用程序。macOS sie…

接口参数校验

方式一&#xff1a;使用hibernate-validator注解方式参数校验 类似的框架太多了。缺点&#xff1a;返回的提示信息顺序不太确定 文档&#xff1a;https://hibernate.org/validator/documentation/ 参考资料&#xff1a;https://blog.csdn.net/weixin_45080272/article/details…

C++二叉树

代码随想录 (programmercarl.com) 二叉树理论基础篇 #算法公开课 《代码随想录》算法视频公开课 (opens new window) 大纲如下&#xff1a; 说到二叉树&#xff0c;大家对于二叉树其实都很熟悉了&#xff0c;本文呢我也不想教科书式的把二叉树的基础内容再啰嗦一遍&#xf…

npm/yarn link 测试包时报错 Warning: Invalid hook call. Hooks can only be called ...

使用 dumi 开发 React 组件库时&#xff0c;为避免每次修改都发布到 npm&#xff0c;需要在本地的测试项目中使用 npm link 为组件库建立软连接&#xff0c;方便本地调试。 结果在本地测试项目使用 $ npm link 组件库 后&#xff0c;使用内部组件确报错&#xff1a; react.dev…

4.(高级示例篇)leaflet移动端交互示例

注&#xff1a;高级示例博客不提供源码 地图之家总目录&#xff08;订阅之前建议先查看该博客&#xff09; 效果如下所示&#xff1a; leaflet移动端交互示例

2023年必须要知道的AI热词,看这一篇就够了!

2023年是AI工具大爆发的一年&#xff0c;随着AI的快速发展&#xff0c;出现了很多AI相关的名词&#xff0c;今天带你详细了解那些热门的AI词。 思维导图&#xff1a; https://gitmind.cn/app/docs/muksa9nd AI 人工智能 Artificial Intelligence&#xff0c;即人工智能&…

如何在VueJS应用程序中设置Toast通知

通知是开发者提升应用程序互动性和改善用户体验的强大工具。通过利用通知&#xff0c;开发者可以在用户与应用程序互动的同时&#xff0c;有效地向用户传达重要事件。 通知在应用程序中起着至关重要的作用&#xff0c;可以及时通知用户有关各种操作和事件的信息。它们可以用于通…

【sgCreateAPI】自定义小工具:敏捷开发→自动化生成API接口脚本(接口代码生成工具)

<template><div :class"$options.name"><div class"sg-head">接口代码生成工具</div><div class"sg-container"><div class"sg-start "><div style"margin-bottom: 10px;">接口地…