1. 程式人生 > >【LeetCode】TreeNode類實現解析(java實現)

【LeetCode】TreeNode類實現解析(java實現)

在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);