Skip to content

Commit 17c5aea

Browse files
committed
init commit
0 parents  commit 17c5aea

File tree

17 files changed

+798
-0
lines changed

17 files changed

+798
-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: 130 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: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
# java_tree_level_order_traversal
2+
3+
Given the `root`of a binary tree, return *the level order traversal of its nodes' values*
4+
. (i.e., from left to right, level by level).
5+
6+
## Examples
7+
8+
**Example 1:**
9+
10+
![https://assets.leetcode.com/uploads/2021/02/19/tree1.jpg](https://assets.leetcode.com/uploads/2021/02/19/tree1.jpg)
11+
12+
```
13+
Input: root = [3,9,20,null,null,15,7]
14+
Output: [[3],[9,20],[15,7]]
15+
16+
```
17+
18+
**Example 2:**
19+
20+
```
21+
Input: root = [1]
22+
Output: [[1]]
23+
24+
```
25+
26+
**Example 3:**
27+
28+
```
29+
Input: root = []
30+
Output: []
31+
32+
```
33+
34+
**Constraints:**
35+
36+
- The number of nodes in the tree is in the range `[0, 2000]`.
37+
- `-1000 <= Node.val <= 1000`
38+
39+
## 解析
40+
41+
題目給定一個二元樹根結點 root。
42+
43+
要求實作一個演算法根據 level order 來尋訪二元樹,並回傳每個 level的結構
44+
45+
這題跟 [199. Binary Tree Right Side View](https://www.notion.so/199-Binary-Tree-Right-Side-View-266ca3b629444b019b41652423f51175) 一樣需要用 Breadth First Search 演算法來實作
46+
47+
使用一個 queue 來儲存每個 level 的所有 node
48+
49+
每次都把這個 queue 的 level 紀錄下來及為所求
50+
51+
如下圖
52+
53+
![](https://i.imgur.com/LBC8UmF.png)
54+
55+
這樣等到 queue 為空時,整個tree 都走訪結束
56+
57+
因此時間複雜度是 O(n) ,空間複雜度也是 O(n)
58+
59+
## 程式碼
60+
```java
61+
class Solution {
62+
/**
63+
* Definition for a binary tree node.
64+
* public class TreeNode {
65+
* int val;
66+
* TreeNode left;
67+
* TreeNode right;
68+
* TreeNode() {}
69+
* TreeNode(int val) { this.val = val; }
70+
* TreeNode(int val, TreeNode left, TreeNode right) {
71+
* this.val = val;
72+
* this.left = left;
73+
* this.right = right;
74+
* }
75+
* }
76+
*/
77+
public List<List<Integer>> levelOrder(TreeNode root) {
78+
List<List<Integer>> result = new ArrayList<>();
79+
Queue<TreeNode> queue = new LinkedList<>();
80+
queue.add(root);
81+
while(queue.size() > 0) {
82+
int levelSize = queue.size();
83+
List<Integer> level = new ArrayList<>();
84+
for (int count = 0; count < levelSize; count++) {
85+
TreeNode node = queue.poll();
86+
if (node != null) {
87+
level.add(node.val);
88+
queue.add(node.left);
89+
queue.add(node.right);
90+
}
91+
}
92+
if (level.size() > 0) {
93+
result.add(level);
94+
}
95+
}
96+
return result;
97+
}
98+
}
99+
```
100+
## 困難點
101+
102+
1. 理解二元樹 level order traversal的意思
103+
2. 理解怎麼去做 level order traversal
104+
105+
## Solve Point
106+
107+
- [x] Understand what problem would like to solve
108+
- [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.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
distributionBase=GRADLE_USER_HOME
2+
distributionPath=wrapper/dists
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
4+
zipStoreBase=GRADLE_USER_HOME
5+
zipStorePath=wrapper/dists

0 commit comments

Comments
 (0)