TreeNode实用方法
TreeNode实用方法
因为刷题的时候经常碰到树相关的题目,但是测试的时候老不方便了,总不能每次都一个节点一个节点去new吧!当然我开始就是这么做的,后来实在是懒得写一大堆测试代码,就写了俩方法,一个根据数组生成节点,一个遍历获取节点的所有子节点,并保存为字符串。
treeToString 获取输出树节点以及所有子节点并生成字符串
convertArrToTree 数组生成树
package com.radish.leetcode.tree;import java.util.ArrayList;
import java.util.List;/*** @Description* @Author Radish* @Date 2020/3/13*/public class TreeNode {public int val;public TreeNode left;public TreeNode right;public TreeNode(int x) { val = x; }TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}/**** @param depth 当前要找的是第几层* @param nodes*/public void getStr(int depth, List<TreeNode> nodes) {int nodeCount = 0;//从头到depth-1层的元素数量int nums = (int)Math.pow(2,depth-1) - 1;//depth-1层元素数量int nums1 = (int)Math.pow(2,depth - 2);//第depth-1层第一个元素下标值int i = nums - nums1;//那就不是深度优先遍历而是广度优先遍历了嗷TreeNode node;for (; i < nums; i++) {node = nodes.get(i);if (node == null) {nodes.add(null);nodes.add(null);} else {if ((node.left != null && (node.left.left != null || node.left.right != null)) ||(node.right != null && (node.right.left != null || node.right.right != null))) nodeCount++;nodes.add(node.left);nodes.add(node.right);}}if (nodeCount > 0) getStr(depth + 1, nodes);}@Overridepublic String toString() {return String.valueOf(val);}/*** 层序遍历一棵树的元素并转化为字符串* @param node* @return*/public static String treeToString(TreeNode node) {//每一层遍历并输出List<TreeNode> nodes = new ArrayList<>();nodes.add(node);if (node.left != null || node.right != null) { node.getStr(2,nodes);}return nodes.toString();}/*** 将数组转化为一棵树,层序遍历* @param nums* @return*/public static TreeNode convertArrToTree(Integer[] nums) {TreeNode[] nodes = new TreeNode[nums.length];//获取层数,根据层数,创建每一层元素,创建好的节点放到数组里,方便double depth = (Math.log(nums.length + 1) / Math.log(2));
// if (depth > (int)depth) depth = (int)depth + 1;for (int i = nums.length - 1; i >= 0; i--) {if (nums[i] == null) nodes[i] = null;else {nodes[i] = new TreeNode(nums[i]);//获取节点深度
// double vv = Math.log(i + 1) / Math.log(2);
// int v = vv > (int)vv ? (int)vv + 1 : (int) vv + 1;//获取左右节点if (nums.length > (2 * i + 1)) {nodes[i].left = nodes[2 * i + 1];}if (nums.length > (2 * i + 2)) {nodes[i].right = nodes[2 * i + 2];}}}return nodes[0];}
}
这个代码写的有点罗里吧嗦的…刚开始还搞出了几个bug,不过经过一段时间的使用,并没有啥问题,我想应该ok了!
TreeNode实用方法相关推荐
- cookie和url参数获取的常规实用方法合集(ES6)
//获取某一个cookie的值 const getCookie = key => {var k = key, dc = document.cookie;if (dc.length > 0) ...
- ASP.NET技巧:两个截取字符串的实用方法
两个截取字符串的实用方法(超过一定长度自动换行) 1/** <summary> 2 /// 截取字符串,不限制字符串长度 3 /// </summary& ...
- Python中os和shutil模块实用方法集锦
Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...
- 离线安装python第三方库的实用方法:解决公司内网,服务器/电脑不能上网却需要安装python三方库问题(上:Windows环境中)
离线安装python第三方库的实用方法:解决公司内网,服务器/电脑不能上网却需要安装python三方库问题(上:Windows环境中) 参考文章: (1)离线安装python第三方库的实用方法:解决公 ...
- (二) LtRecyclerView v2.x (更多实用方法)
(一) 超简单自定义上下刷新布局-LtRecyclerView v2.x版本(基本使用) (二) LtRecyclerView v2.x (更多实用方法) (三) LtRecyclerView v2. ...
- clob类型用java怎么存,Java 储存和读取 oracle CLOB 类型字段的实用方法
当前位置:我的异常网» 编程 » Java 储存和读取 oracle CLOB 类型字段的实用方法 Java 储存和读取 oracle CLOB 类型字段的实用方法 www.myexceptions. ...
- C#WinForm WebBrowser (二) 实用方法总结
实用方法1:获取状态栏信息 void webBrowser1_StatusTextChanged(object sender, EventArgs e){ label1.Text = webBrows ...
- ipa解包打包工具_ios打包ipa的四种实用方法(.app转.ipa)
总结一下,目前.app包转为.ipa包的方法有以下几种: 1.Apple推荐的方式,即实用xcode的archive功能 Xcode菜单栏->Product->Archive->三选 ...
- ios打包ipa的四种实用方法(.app转.ipa)
[原]ios打包ipa的四种实用方法(.app转.ipa) 总结一下,目前.app包转为.ipa包的方法有以下几种: 1.Apple推荐的方式,即实用xcode的archive功能 Xcode菜单栏- ...
最新文章
- GreenPlum学习笔记:基础知识
- 汽车加油c语言作业,算法作业—汽车加油问题
- 【小白学习keras教程】一、基于波士顿住房数据集训练简单的MLP回归模型
- JS构造map/dict结构
- 用户登录和注册的功能
- 程序员面试金典 - 面试题 02.05. 链表求和
- python2 http请求post、get
- 这是自己的第一篇博客
- ide在控制台输入编译命令_编译原理、VC的构成以及用VC2010建立C程序
- windows php redis扩展安装,怎么在Windows下安装PHP的Redis扩展服务
- 2017计算机办公自动化试题,2017年办公自动化考试试题及解答
- [配套工具] 【新手福音】最简单的大漠插件注册方法 只需四行代码 每行附有详细说明
- 腾讯地图获取地址的经度和纬度
- [洛谷P1338] 末日的传说
- 云服务器-华为云服务器ECS挂载对象存储服务OBS教程
- 【产品运营从0到1】资深产品运营推荐的互联网产品运营人员必看书籍
- VMware解决:未能将管道连接到虚拟机: 所有的管道范例都在使用中。
- 笔记-项目干系人管理-控制干系人参与
- [CSP-S 2022] 策略游戏
- spring 定时器时间配置
热门文章
- JavaWeb毕业设计-蛋糕商城系统(idea可用)
- (完整答案)2021年广东财经大学硕士研究生入学考试试卷--统计学0714
- 关于微信小程序的一些看法
- CF549H Degenerate Matrix
- 进度条警告!TheBrain 11落幕!超多思维导图新功能即将登陆12版
- 图灵头像印上50英镑新钞,取代蒸汽机之父瓦特,赶在图灵生日之际发行
- 熊猫卡丁车图片android版,熊猫卡丁车-宝宝巴士
- marktext 文字居中_MarkText - Markdown文本编辑器,做笔记和写作
- Springboot连接redis配置
- 奇怪的messagebeep()