【LeetCode】TreeNode类实现解析(java实现)
https://blog.csdn.net/styshoo/article/details/52865386
在LeetCode中,TreeNode是经常用到的一个结构体,表示数据结构树(Tree)中的一个节点。其官方定义如下:
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
1
2
3
4
5
6
在Tree的题目中,常会给出一些测试用例,用一些特定的格式来表示一棵树,如[3,9,20,null,null,15,7]就表示如下的一棵树:
3
/ \
9 20
/ \
15 7
1
2
3
4
5
因此,我扩展了一下这个TreeNode的一些实现,使其可以通过官方给出的格式方便的构建出一棵树,从而使得我们在自己写玩代码后能很方便地调试。
package MakeLeetCodeClass;
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
TreeNode(int x) { val = x; }
public String toString(){
return Integer.toString(val);
}
// int []arr = {3, 9, 20, Integer.MAX_VALUE, Integer.MAX_VALUE, 15, 7};
private static int[] StrToIntArray(String str) {
str = str.substring(1, str.length() - 1);
String []strs = str.split(",");
int []arr = new int[strs.length];
for (int i = 0; i < arr.length; i++) {
if (strs[i].equals("null")) {
arr[i] = Integer.MAX_VALUE;
} else {
arr[i] = Integer.parseInt(strs[i]);
}
}
return arr;
}
// String str = "[3,9,20,null,null,15,7]";
public static TreeNode mkTree(String str) {
int []arr = StrToIntArray(str);
TreeNode []nodes = new TreeNode[arr.length + 1];
for (int i = 1; i < nodes.length; i++) {
if (arr[i - 1] != Integer.MAX_VALUE) {
nodes[i] = new TreeNode(arr[i - 1]);
}else {
nodes[i] = null;
}
}
TreeNode node = null;
for (int i = 1; i < nodes.length / 2; i++) {
node = nodes[i];
if (node == null) continue;
node.left = nodes[2 * i];
node.right = nodes[2 * i + 1];
}
return nodes[1];
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
使用以上代码时,只需要使用该代码建立一个项目,再将其链接到你的工作代码中即可。调用静态函数mkTree即可把官方给出的Tree的格式转换为一棵树,非常简单,如下:String str = "[3,9,20,null,null,15,7]";
TreeNode node = TreeNode.mkTree(str);
!
【LeetCode】TreeNode类实现解析(java实现)的更多相关文章
- Java 8 Optional 类深度解析
Java 8 Optional 类深度解析 身为一名Java程序员,大家可能都有这样的经历:调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法.我们首先要判断这个返回值是否为null,只 ...
- 【转】两道面试题,带你解析Java类加载机制(类初始化方法 和 对象初始化方法)
本文转自 https://www.cnblogs.com/chanshuyi/p/the_java_class_load_mechamism.html 关键语句 我们只知道有一个构造方法,但实际上Ja ...
- javap -- Java 类文件解析器
参考文档 http://blog.chinaunix.net/uid-692788-id-2681132.html http://docs.oracle.com/javase/7/docs/techn ...
- Java File类基础解析 1
Java File类基础解析 1 File类的构造方法 public File(String pathname) :通过给定的路径名字符转换为抽象路径名来创建新的File实例 String path ...
- 解析java实体类
对java实体类的众多理解: A .就是属性类,通常定义在model层里面 B. 一般的实体类对应一个数据表,其中的属性对应数据表中的字段. 好处: 1.对对象实体的封装,体现OO思想. 2.属性可以 ...
- xml 解析 java 基础复习
document 解析 sax 解析 dom4j 解析(摘自csdn redarmychen) dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常 ...
- 转:二十一、详细解析Java中抽象类和接口的区别
转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...
- 聊聊高并发(二十九)解析java.util.concurrent各个组件(十一) 再看看ReentrantReadWriteLock可重入读-写锁
上一篇聊聊高并发(二十八)解析java.util.concurrent各个组件(十) 理解ReentrantReadWriteLock可重入读-写锁 讲了可重入读写锁的基本情况和基本的方法,显示了怎样 ...
- 【JVM系列】一步步解析java执行内幕
对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者叫底层机制)不失为一种良好的方式.在本篇文章中,将重点研究java源代码的执行原理,即从程 序员编写JAVA源代码,到最终形成产品,在整个过 ...
随机推荐
- mitmproxy的使用
一.介绍 中间人代理可以理解成和中间件差不多 mitmproxy工程工具包,主要包含了3个组件 mitmproxy:拦截的http(s)记录控制台显示 [window不支持] mitmdump:命令行 ...
- linux中服务(service)管理
一.介绍 服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程,是Linux 中非常重 ...
- 清新水彩追梦在路上述职报告通用PPT模板
清新漫画风,轻松可爱模版来源: http://ppt.dede58.com/gongzuohuibao/26566.html
- Html5 Canvas动画基础碰撞检测的实现
在Canvas中进行碰撞检测,大家往往直接采用游戏引擎(Cocos2d-JS.Egret)或物理引擎(Box2D)内置的碰撞检测功能,好奇的你有思考过它们的内部运行机制吗?下面将针对基本的碰撞检测技术 ...
- android-ramdisk.img分析、recovery.img&boot.img执行过程【转】
一.ramdisk介绍 ramdisk通过直面意思就大概能理解意思,ram disk虚拟内存盘,将ram模拟成硬盘来使用的文件系统.对于传统的磁盘文件系统来说,这样做的好处是可以极大提高文件访问速度: ...
- 002 C/C++ 数组的传递
传递一个数组给一个函数的正确做法: 1.传递数组的内存首地址. 2.传递数组的有效长度.指数组的元素数量. 编译器总是将数组类型的变量作为指针传递. 计算数组的长度: int length = siz ...
- 反卷积(Transposed Convolution)
反卷积的具体计算步骤 令图像为 卷积核为 case 1 如果要使输出的尺寸是 5x5,步数 stride=2 ,tensorflow 中的命令为: transpose_conv = tf.nn.con ...
- C语言解决汉诺塔问题!
很难受,看了很多资料才明白..... 对这个问题分析,发现思路如下:有n个黄金盘,要先把n-1个弄到B柱上,再把第n个弄到C柱上,然后把n-1个借助A柱弄到C柱上. 实现的函数如下: void f(i ...
- 重载&重写的区别
重载(Overload) 1.重载(Overload)是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 2.重载(Overload)是一个类中多态性的一种 ...
- 查看某个进程的错误日志 ps axu 结合 grep -i
某台机器的flume报错,想要快速看到报错的内容,可以结合ps axu 和grep -i来实现. 1. ps axu |grep flume 可以看到flume的进程的启动位置. 2. 根据启动的位置 ...