Leetcode655 输出二叉树

给你一棵二叉树的根节点 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 。

在这里插入图片描述

输入:root = [1,2]
输出:
二叉树高度为1
所以矩阵的行数为1+1=2;
列数为2^(1+1)-1=3
[["","1",""],  ["2","",""]]

解:

public List<List<String>> printTree(TreeNode root) {//获取高度int height = getHeight(root);String[][] ans = new String[height][(1 << height) - 1];for (String[] arr : ans) {Arrays.fill(arr, "");}List<List<String>> res = new ArrayList<>();fill(ans, root, 0, 0, ans[0].length);for (String[] arr : ans) {res.add(Arrays.asList(arr));}return res;}/*** 填充数组*ans  数组*root 根节点*i    第几行*l    左节点*r    右节点*/private void fill(String[][] ans, TreeNode root, int i, int l, int r) {if (root == null) {return;}ans[i][(l + r) / 2] = "" + root.val;fill(ans, root.left, i + 1, l, (l + r) / 2);fill(ans, root.right, i + 1, (l + r + 1) / 2, r);}//获取树的高度private int getHeight(TreeNode root) {if (root == null) {return 0;}return Math.max(getHeight(root.left), getHeight(root.right)) + 1;}

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/print-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode782 变为棋盘

一个 n x n 的二维网络 board 仅由 0 和 1 组成 。每次移动&#xff0c;你能任意交换两列或是两行的位置。 返回 将这个矩阵变为 “棋盘” 所需的最小移动次数 。如果不存在可行的变换&#xff0c;输出 -1。 “棋盘” 是指任意一格的上下左右四个方向的值均与本身不同的矩阵。…

洛谷P8840 Java题解

题目描述 花栗鼠科技大学的计算机组成原理实验最终的结课考核方式是提交一份报告。 然而作为任课老师&#xff0c;萝老师不希望大家过于内卷&#xff0c;所以指定了如下规定&#xff1a; 每份报告有一个卷面基础分 aa。 在此基础上&#xff1a; 若是报告字数低于 1616 页&a…

[博学谷学习记录] 超强总结,用心分享|JavaEE就业课-尊享无忧+Java基础语法|面向对象(2wk)

目录 面向对象 类和对象的关系 对象的使用​编辑 垃圾回收 局部变量和成员变量 private 关键字 this 关键字 封装&#xff08;三大面向对象特征之一&#xff09; 构造方法 构造方法格式 执行时机 构造方法的注意事项 标准类制作 面向对象 类和对象的关系 类:类是…

晶灿钻石宝可梦总结

你知道哪个世代的宝可梦最强吗&#xff1f; 【宝可梦晶灿钻石明亮珍珠29】全道具获取收集地点合集攻略&#xff01; 骑拉帝纳 宝可梦晶灿钻石明亮珍珠美纳斯怎么获得 丑丑鱼在哪里捕捉 https://serebii.net/ 杂谈21——打了3小时冠军&#xff0c;我终于过了珍钻复刻一周目…

安卓启动模式

使用任务栈来储存创建的Activity&#xff0c;栈是先进后出 1.标准模式 standard 默认 2.栈顶模式-singletop 栈顶存在 则复用 3.栈内复用-singletask 会将要复用的activity上边的实例全部出栈&#xff0c;随后将其置顶 4.单例-singleInstance 如果设置某个activity为 此默认…

安卓开发-动画

动画 视图动画&#xff1a;将逐帧动画和补间动画统称为视图动画&#xff0c;用于指定控件的动画 逐帧动画&#xff1a;以xml或者代码的方式&#xff0c;实现多帧动画的播放 补间动画&#xff1a;对控件可以进行移动、旋转、缩放等操作 属性动画&#xff1a;通过改变控件的某…

诚之和:盗本、洗稿…剧本杀火热背后的版权之痛盗版正版同天发售

胖丁是一位传统文学作者&#xff0c;同时也是寒炉文化总监制、剧堆创始人。2020年&#xff0c;他带着新发行的剧本《少儿不宜》在重庆参加一场展会&#xff0c;但始料未及的是&#xff0c;展会结束后一周&#xff0c;胖丁就在不少电商平台、二手平台上发现了自己的同款剧本。 …

安卓viewpager联动方案

ViewPager 联动方案&#xff1a; 1.通过ViewPager1计算出滑动的距离&#xff0c;将此距离在给ViewPager2滑动 ViewPager1滑动距离&#xff1a;滑动初始页到左右边距的距离&#xff1b; distancepositon*View.getWidth()oisutuibOffsetPixels 2.通过设置ViewPager2的scrollT…

常见面试题总结

JAVA篇 1.什么是面向对象&#xff1f;面向对象的优点 只需要关注每个对象具体做了什么&#xff0c;调用操作可以进行封装&#xff0c;更加易于复用、扩展和维护。 三大特点&#xff1a; 封装-明确标识允许外部调用的方法&#xff0c;无需关注内部实现&#xff08;例如get/s…

原生html+css+js制作宠物小精灵icon

前言 上百个pokemon icon&#xff0c;纯htmlcss绘制&#xff0c;分享给大家&#xff01; 文章目录 前言一、皮卡丘1.皮卡丘2.雷丘 二、妙蛙种子1.妙蛙种子2.妙蛙草3.妙蛙花 三、小火龙1.小火龙2.火恐龙3.喷火龙 四、杰尼龟1.杰尼龟2.卡咪龟3.水箭龟 五、胖丁1.胖丁2.胖可丁 …

【MySQL】数据库多表操作通关教程(外键约束、多表联合查询)

&#x1f481; 个人主页&#xff1a;Nezuko627的博客主页 ❤️ 支持我&#xff1a;&#x1f44d; 点赞 &#x1f337; 收藏 &#x1f918;关注 &#x1f38f; 格言&#xff1a;一步一个脚印才能承接所谓的幸运 本文来自专栏&#xff1a;MySQL8.0学习笔记 本文参考视频&#xff…

vuex -- 数组对象的“双向数据绑定”

vuex不允许在组件内部直接修改共享数据&#xff0c;需要在mutations中修改数据&#xff0c;所以涉及到双向绑定不能使用v-model &#x1f4a1; 需求 需要增加&#xff0c;删除数据&#xff0c;并且可以修改每一项的done 步骤 在state中提供一个对象数组 state: {list: [{i…

自动驾驶什么时候才会凉凉,估计还要多久?

作者&#xff1a;哆啦胖丁 链接&#xff1a;https://www.zhihu.com/question/404870865/answer/1364318345 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 我会觉得在自动驾驶这一块&#xff0c;大家都有这么一个共…

你所不知道 ❌ Resource

前言 找我请到 掘金 或者 Github 自己也维护不过来那么多站点&#xff0c;对不住大家了。 ? 更新平台多偶尔会漏掉&#xff0c;如果觉得文章还行点个 star 防走失。 你所不知道 ❌ 系列一起探索未知 很久没写文章了&#xff0c;在新的公司新的遇到了新的伙伴&#xff0c;胖丁哥…

js画一条快乐的胖丁鱼

朋友echarts周围要花一个像时钟一样的光圈&#xff0c;突发奇想像画一条&#x1f41f;&#xff0c;然后就有了这篇博客&#xff0c;有时间&#xff0c;你还可以画一张你喜欢的小可爱的脸&#xff0c;把里面的东西稍微改动下&#xff0c;就可以有个嘴巴&#xff0c;耳朵&#xf…

三端取图小程序后端源码

简介&#xff1a; 后端&#xff1a;开发使用bootstrap框架&#xff0c;源码无加密&#xff0c;程序中预留位置 可拓展为支持创作者入驻取图小程序&#xff0c;接口使用json传送数据&#xff0c;未进行加密。 前端&#xff1a;三端程序使用uniapp开发&#xff0c;前端源码中仅…

latex 制作个人简历,CV

用 latex 写的简历&#xff0c;效果比 word 好很多&#xff0c;见下面效果图&#xff1a; 推荐大家用 overleaf 中的简历模板来做&#xff0c;https://www.overleaf.com/gallery/tagged/cv&#xff0c; 上面有成千上万个模板。 插图中的模板网址是&#xff1a;https://www.ove…

几个著名的3D测试场景与模型

来自&#xff1a;http://tieba.baidu.com/p/2516805630 Sponza Atrium&#xff08;Marko Dabrovic版&#xff09; 由来自Lightwave的Marko Dabrovic于2002年创建&#xff0c;原型是位于克罗地亚南部港口城市杜布罗夫尼克的著名旅游景点、有400余年历史的Sponza宫。因其发杂又易…

兰州数字孪生工厂3D模型,三维可视化建模,三维虚拟仿真交互模型

兰州数字孪生工厂3D模型&#xff0c;三维可视化建模&#xff0c;三维虚拟仿真交互模型。三维可视化建模技术是将实物或假想物1:1真实感三维渲染到计算机上的技术。三维可视化建模技术是未来建设智能单元、智能生产线、智能车间、智能工厂、三维可视化数字孪生系统的基础。 三维…

青岛数字孪生工厂3D模型,三维可视化建模,三维虚拟仿真交互模型

青岛数字孪生工厂3D模型&#xff0c;三维可视化建模&#xff0c;三维虚拟仿真交互模型。3D可视化建模引擎可助力企业快速构建智慧工厂三维可视化平台&#xff0c;拖过在线拖拉拽模型组件的方式&#xff0c;轻松搭建工厂三维场景&#xff0c;通过三维可视化手段对工厂各类设备进…