【LeetCode】TreeNode類實現解析(java實現)
阿新 • • 發佈:2019-02-15
在LeetCode中,TreeNode是經常用到的一個結構體,表示資料結構樹(Tree)中的一個節點。其官方定義如下:
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
在Tree的題目中,常會給出一些測試用例,用一些特定的格式來表示一棵樹,如[3,9,20,null,null,15,7]就表示如下的一棵樹:
3
/ \
9 20
/ \
15 7
因此,我擴充套件了一下這個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];
}
}
使用以上程式碼時,只需要使用該程式碼建立一個專案,再將其連結到你的工作程式碼中即可。呼叫靜態函式mkTree即可把官方給出的Tree的格式轉換為一棵樹,非常簡單,如下:
String str = "[3,9,20,null,null,15,7]";
TreeNode node = TreeNode.mkTree(str);