Skip to content

Commit bb006b7

Browse files
committed
init commit
0 parents  commit bb006b7

File tree

17 files changed

+808
-0
lines changed

17 files changed

+808
-0
lines changed

.github/workflows/java.yml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: Java
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
pull_request:
8+
branches:
9+
- master
10+
11+
jobs:
12+
build:
13+
runs-on: ubuntu-latest
14+
steps:
15+
- name: Checkout
16+
uses: actions/checkout@v3
17+
- name: Setup JDK 11
18+
uses: actions/setup-java@v3
19+
with:
20+
distribution: 'adopt'
21+
java-version: '11'
22+
- name: Grant execution permission for gradlew
23+
run: chmod +x gradlew
24+
- name: Cache Gradle packages
25+
uses: actions/cache@v3
26+
with:
27+
path: ~/.gradle/caches
28+
key: ${{ runner.os }}-gradle-${{ github.event.repository.name }}-${{ hashFiles('**/*.gradle')}}
29+
restore-keys: ${{ runner.os }}-gradle-${{ github.event.repository.name }}
30+
- name: Build with Gradlew
31+
run: ./gradlew build
32+
- name: Test with Gradlew
33+
run: ./gradlew :test --tests "SolutionTest"

.gitignore

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
.gradle
2+
build/
3+
!gradle/wrapper/gradle-wrapper.jar
4+
!**/src/main/**/build/
5+
!**/src/test/**/build/
6+
7+
### IntelliJ IDEA ###
8+
.idea/modules.xml
9+
.idea/jarRepositories.xml
10+
.idea/compiler.xml
11+
.idea/libraries/
12+
*.iws
13+
*.iml
14+
*.ipr
15+
out/
16+
!**/src/main/**/out/
17+
!**/src/test/**/out/
18+
19+
### Eclipse ###
20+
.apt_generated
21+
.classpath
22+
.factorypath
23+
.project
24+
.settings
25+
.springBeans
26+
.sts4-cache
27+
bin/
28+
!**/src/main/**/bin/
29+
!**/src/test/**/bin/
30+
31+
### NetBeans ###
32+
/nbproject/private/
33+
/nbbuild/
34+
/dist/
35+
/nbdist/
36+
/.nb-gradle/
37+
38+
### VS Code ###
39+
.vscode/
40+
41+
### Mac OS ###
42+
.DS_Store

.husky/pre-commit

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#!/bin/bash
2+
./gradlew :test --tests "SolutionTest"

.idea/gradle.xml

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/workspace.xml

Lines changed: 128 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# java_build_binary_tree_from_preOrder_inOrder
2+
3+
Given two integer arrays `preorder` and `inorder` where `preorder` is the preorder traversal of a binary tree and `inorder` is the inorder traversal of the same tree, construct and return *the binary tree*.
4+
5+
## Examples
6+
7+
**Example 1:**
8+
9+
![https://assets.leetcode.com/uploads/2021/02/19/tree.jpg](https://assets.leetcode.com/uploads/2021/02/19/tree.jpg)
10+
11+
```
12+
Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
13+
Output: [3,9,20,null,null,15,7]
14+
15+
```
16+
17+
**Example 2:**
18+
19+
```
20+
Input: preorder = [-1], inorder = [-1]
21+
Output: [-1]
22+
23+
```
24+
25+
**Constraints:**
26+
27+
- `1 <= preorder.length <= 3000`
28+
- `inorder.length == preorder.length`
29+
- `3000 <= preorder[i], inorder[i] <= 3000`
30+
- `preorder` and `inorder` consist of **unique** values.
31+
- Each value of `inorder` also appears in `preorder`.
32+
- `preorder` is **guaranteed** to be the preorder traversal of the tree.
33+
- `inorder` is **guaranteed** to be the inorder traversal of the tree.
34+
35+
## 解析
36+
37+
題目以 Pre-Order Traversal 與 In-Order Traversal 給出兩個整數陣列
38+
39+
求實作一個演算法建立出這棵二元樹
40+
41+
Pre-Order Traversal 特性會有以下走訪順序如下:
42+
43+
二元樹root , root.Left 子樹, root.Right 子樹
44+
45+
In-Order Traversal 特性會有以下走訪順序如下:
46+
47+
root.Left 子樹, 二元樹root, root.Right 子樹
48+
49+
觀察下圖
50+
51+
![](https://i.imgur.com/KYVbaXL.png)
52+
53+
可以發現
54+
55+
每個 pre-order的點先遇到的都是子樹的跟結點
56+
57+
透過 pre-order的點去找到在 in-order的位置剛好可以把左右子數分開
58+
59+
所以可以透過遞迴關係來建立二元樹
60+
61+
## 程式碼
62+
```java
63+
class Solution {
64+
/**
65+
* Definition for a binary tree node.
66+
* public class TreeNode {
67+
* int val;
68+
* TreeNode left;
69+
* TreeNode right;
70+
* TreeNode() {}
71+
* TreeNode(int val) { this.val = val; }
72+
* TreeNode(int val, TreeNode left, TreeNode right) {
73+
* this.val = val;
74+
* this.left = left;
75+
* this.right = right;
76+
* }
77+
* }
78+
*/
79+
int preorderIdx;
80+
public TreeNode buildTree(int[] preorder, int[] inorder) {
81+
preorderIdx = 0;
82+
HashMap<Integer, Integer> inorderIdxMap = new HashMap<>();
83+
for (int idx = 0; idx < inorder.length; idx++) {
84+
inorderIdxMap.put(inorder[idx], idx);
85+
}
86+
return arrayToTree(preorder, 0, preorder.length - 1, inorderIdxMap);
87+
}
88+
public TreeNode arrayToTree(int[] preorder, int left, int right, HashMap<Integer, Integer> inorderIdxMap) {
89+
if (left > right) {
90+
return null;
91+
}
92+
int rootValue = preorder[preorderIdx];
93+
preorderIdx++;
94+
TreeNode root = new TreeNode(rootValue);
95+
root.left = arrayToTree(preorder, left, inorderIdxMap.get(rootValue) - 1, inorderIdxMap);
96+
root.right = arrayToTree(preorder,inorderIdxMap.get(rootValue) + 1, right, inorderIdxMap);
97+
return root;
98+
}
99+
}
100+
```
101+
102+
## 困難點
103+
104+
1. 看出 Pre-Order Traversal 與 In-Order Traversal 的特性
105+
2. 看出遞迴關係
106+
107+
## Solve Point
108+
109+
- [x] Understand what problem need to solve
110+
- [x] Analysis Complexity

build.gradle

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
plugins {
2+
id 'java'
3+
}
4+
5+
group 'org.example'
6+
version '1.0-SNAPSHOT'
7+
8+
repositories {
9+
mavenCentral()
10+
}
11+
12+
dependencies {
13+
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
14+
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
15+
}
16+
17+
test {
18+
useJUnitPlatform()
19+
}

gradle/wrapper/gradle-wrapper.jar

58.4 KB
Binary file not shown.

0 commit comments

Comments
 (0)