Skip to content

Commit d653dda

Browse files
committed
feat: add 108
1 parent 811ad31 commit d653dda

File tree

7 files changed

+157
-98
lines changed

7 files changed

+157
-98
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
|101|[Symmetric Tree][101]|Tree, Depth-first Search, Breadth-first Search|
3131
|104|[Maximum Depth of Binary Tree][104]|Tree, Depth-first Search|
3232
|107|[Binary Tree Level Order Traversal II][107]|Tree, Breadth-first Search|
33+
|108|[Binary Tree Level Order Traversal II][107]|Tree, Depth-first Search|
3334

3435

3536
## Medium

note/108/README.md

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# [Convert Sorted Array to Binary Search Tree][title]
2+
3+
## Description
4+
5+
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
6+
7+
**Tags:** Tree, Depth-first Search
8+
9+
10+
## 思路
11+
12+
题意是把一个有序数组转化为一棵二叉搜索树,二叉搜索树具有以下性质:
13+
14+
1. 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
15+
2. 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
16+
3. 任意节点的左、右子树也分别为二叉查找树;
17+
4. 没有键值相等的节点。
18+
19+
所以我们可以用递归来构建一棵二叉搜索树,每次把数组分为两半,把数组中间的值作为其父节点,然后把数组的左右两部分继续构造其左右子树。
20+
21+
22+
``` java
23+
/**
24+
* Definition for a binary tree node.
25+
* public class TreeNode {
26+
* int val;
27+
* TreeNode left;
28+
* TreeNode right;
29+
* TreeNode(int x) { val = x; }
30+
* }
31+
*/
32+
class Solution {
33+
public TreeNode sortedArrayToBST(int[] nums) {
34+
if (nums == null || nums.length == 0) return null;
35+
return helper(nums, 0, nums.length - 1);
36+
}
37+
38+
private TreeNode helper(int[] nums, int left, int right) {
39+
if (left > right) return null;
40+
int mid = (left + right) >>> 1;
41+
TreeNode node = new TreeNode(nums[mid]);
42+
node.left = helper(nums, left, mid - 1);
43+
node.right = helper(nums, mid + 1, right);
44+
return node;
45+
}
46+
}
47+
```
48+
49+
50+
## 结语
51+
52+
如果你同我一样热爱数据结构、算法、LeetCode,可以关注我GitHub上的LeetCode题解:[awesome-java-leetcode][ajl]
53+
54+
55+
56+
[title]: https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree
57+
[ajl]: https://github.com/Blankj/awesome-java-leetcode

project/leetcode/.idea/workspace.xml

+65-97
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Binary file not shown.
Binary file not shown.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.blankj.easy._108;
2+
3+
4+
import com.blankj.structure.TreeNode;
5+
6+
/**
7+
* <pre>
8+
* author: Blankj
9+
* blog : http://blankj.com
10+
* time : 2017/10/09
11+
* desc :
12+
* </pre>
13+
*/
14+
public class Solution {
15+
public TreeNode sortedArrayToBST(int[] nums) {
16+
if (nums == null || nums.length == 0) return null;
17+
return helper(nums, 0, nums.length - 1);
18+
}
19+
20+
private TreeNode helper(int[] nums, int left, int right) {
21+
if (left > right) return null;
22+
int mid = (left + right) >>> 1;
23+
TreeNode node = new TreeNode(nums[mid]);
24+
node.left = helper(nums, left, mid - 1);
25+
node.right = helper(nums, mid + 1, right);
26+
return node;
27+
}
28+
29+
public static void main(String[] args) {
30+
Solution solution = new Solution();
31+
TreeNode.print(solution.sortedArrayToBST(new int[]{0, 1, 2, 3, 4, 5, 6, 7}));
32+
}
33+
}

project/leetcode/src/com/blankj/structure/TreeNode.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class TreeNode {
1414
public TreeNode left;
1515
public TreeNode right;
1616

17-
TreeNode(int x) {
17+
public TreeNode(int x) {
1818
val = x;
1919
}
2020

0 commit comments

Comments
 (0)