Skip to content

Commit 0eac86b

Browse files
committed
#102 BFS重新复习
1 parent ae992d6 commit 0eac86b

File tree

3 files changed

+125
-3
lines changed

3 files changed

+125
-3
lines changed

Diff for: README.md

+41-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,41 @@
1-
#### 自己刷题记录的一个仓库
2-
+ 利用leetcode idea插件刷题,用本地环境写代码,并调试单元测试,通过来直接提交
3-
+ 索引暂无
1+
## 算法知识结构梳理
2+
#### 数组
3+
4+
#### 链表
5+
6+
####
7+
8+
#### 队列
9+
10+
#### 散列表
11+
12+
####
13+
14+
#### 递归
15+
16+
#### 分治
17+
18+
#### 回溯
19+
20+
#### 动态规划
21+
###### [定义](https://zh.wikipedia.org/wiki/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92)
22+
+ simplifying a complicated problem by breaking it down into simper problems(in a recursive manner)
23+
+ Divide & Conquer + Optimal substructure (分治+最优子结构)
24+
##### 思想与应用
25+
+ 思想上,若要解一个给定的问题,我们需要解其不同部分(即子问题),再根据子问题解以得出问题的解
26+
+ 动态规划常常适用于有重叠子问题和最有子结构性质的问题
27+
28+
##### 解题关键点
29+
+ 动态规划和递归或者分治没有根本上的区别(关键看有无最优子结构)
30+
+ 共性: 找到重复子问题
31+
+ 差异性:最优子结构、中途可以淘汰次优解
32+
33+
##### 题目
34+
+ [509. 斐波那契数](https://leetcode-cn.com/problems/fibonacci-number/) ☑️
35+
36+
#### 贪心
37+
38+
#### 查找
39+
40+
#### 排序
41+

Diff for: main/src/tree/LC_102_BinaryTreeLevelOrder.java

+50
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,54 @@ private void _helper(TreeNode treeNode, int level, List<List<Integer>> result) {
9999

100100
}
101101

102+
/**
103+
* BFS思路:用queue解决,每一层的节点,输出当前节点的时候,都去判断是否有子节点,按并将子节点顺序入队
104+
*/
105+
public List<List<Integer>> levelOrderBFS_2(TreeNode root) {
106+
List<List<Integer>> result = new ArrayList<>();
107+
if (null == root) {
108+
return result;
109+
}
110+
Queue<TreeNode> queue = new LinkedList<>();
111+
queue.add(root);
112+
while (!queue.isEmpty()) {
113+
// 由于需要将每一层的节点入队,需要判断队列中那些数据是属于本层的,
114+
// 通过开始遍历本层之前,记录这一层节点数量,每出队一个节点,计数器减少1,直至减少为0
115+
int currentQueueSize = queue.size();
116+
List<Integer> curList = new ArrayList<>();
117+
while (currentQueueSize-- > 0) {
118+
TreeNode cur = queue.poll();
119+
curList.add(cur.val);
120+
if (cur.left != null)
121+
queue.add(cur.left);
122+
if (cur.right != null)
123+
queue.add(cur.right);
124+
}
125+
result.add(curList);
126+
}
127+
return result;
128+
}
129+
130+
/**
131+
* 递归
132+
*/
133+
public List<List<Integer>> levelOrder_recur_2(TreeNode root) {
134+
List<List<Integer>> result = new ArrayList<>();
135+
_recur_help(root, 0, result);
136+
return result;
137+
}
138+
139+
private void _recur_help(TreeNode root, int level, List<List<Integer>> result) {
140+
// 初始化数组:根据层级编号,如果数组在本层尚未进行初始化,需要初始化本层的数组
141+
if (level == result.size()) {
142+
result.add(new ArrayList<>());
143+
}
144+
result.get(level).add(root.val);
145+
if (root.left != null) {
146+
_recur_help(root.left, level + 1, result);
147+
}
148+
if (root.right != null) {
149+
_recur_help(root.right, level + 1, result);
150+
}
151+
}
102152
}

Diff for: main/test/tree/LC_102_BinaryTreeLevelOrderTest.java

+34
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,38 @@ public void testLevelOrderRecur2() {
8686
assertThat(result, is(except));
8787

8888
}
89+
90+
@Test
91+
public void testLevelOrderBFS_2() {
92+
TreeNode root3 = new TreeNode(3);
93+
TreeNode right20 = new TreeNode(20);
94+
right20.left = new TreeNode(15);
95+
right20.right = new TreeNode(7);
96+
root3.left = new TreeNode(9);
97+
root3.right = right20;
98+
List<List<Integer>> result = binaryTreeLevelOrder.levelOrderBFS_2(root3);
99+
List<List<Integer>> except = new ArrayList<>();
100+
except.add(Collections.singletonList(3));
101+
except.add(Arrays.asList(9, 20));
102+
except.add(Arrays.asList(15, 7));
103+
assertThat(result, is(except));
104+
105+
}
106+
107+
@Test
108+
public void testLevelOrder_recur_2() {
109+
TreeNode root3 = new TreeNode(3);
110+
TreeNode right20 = new TreeNode(20);
111+
right20.left = new TreeNode(15);
112+
right20.right = new TreeNode(7);
113+
root3.left = new TreeNode(9);
114+
root3.right = right20;
115+
List<List<Integer>> result = binaryTreeLevelOrder.levelOrder_recur_2(root3);
116+
List<List<Integer>> except = new ArrayList<>();
117+
except.add(Collections.singletonList(3));
118+
except.add(Arrays.asList(9, 20));
119+
except.add(Arrays.asList(15, 7));
120+
assertThat(result, is(except));
121+
122+
}
89123
}

0 commit comments

Comments
 (0)