LeetCode - 2196

2026年1月1日

LeetCode 2196

解法

分析 descriptions:

  • 節點值唯一,可作為 key 使用
  • 可使用 Hash Table 建立節點關係並取得對應節點

分析數值限制:

  • max(parenti, childi) <= 10^5
  • descriptions.length <= 10^4

權衡效能:

  • 在實務經驗中,當值域大小相對於資料筆數為十幾倍以內時,可用 Array 取代 Hash Table 以提升效能

程式碼

java
public TreeNode createBinaryTree(int[][] descriptions) {
  int maxVal = 0;
  for (int[] d : descriptions) {
    maxVal = Math.max(maxVal, Math.max(d[0], d[1]));
  }
  TreeNode[] nodes = new TreeNode[maxVal + 1];
  boolean[] isChild = new boolean[maxVal + 1];
  for (int[] d : descriptions) {
    int parentVal = d[0];
    int childVal = d[1];
    boolean isLeft = d[2] == 1;
    if (nodes[parentVal] == null) {
      nodes[parentVal] = new TreeNode(parentVal);
    }
    if (nodes[childVal] == null) {
      nodes[childVal] = new TreeNode(childVal);
    }
    if (isLeft) {
      nodes[parentVal].left = nodes[childVal];
    } else {
      nodes[parentVal].right = nodes[childVal];
    }
    isChild[childVal] = true;
  }
  for (int i = 1; i <= maxVal; i++) {
    if (nodes[i] != null && !isChild[i]) {
      return nodes[i];
    }
  }
  return null;
}