Skip to content

Commit 17026d6

Browse files
author
王鹏
committed
feat(EASY): add _110_isBalanced
1 parent b5740ef commit 17026d6

File tree

3 files changed

+108
-0
lines changed

3 files changed

+108
-0
lines changed

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818

1919
- [x] [109. 有序链表转换二叉搜索树 --Medium]([_109_sortedListToBST.java](https://github.com/pphdsny/Leetcode-Java/blob/master/src/pp/arithmetic/leetcode/_109_sortedListToBST.java))
2020

21+
- [ ] [110. 平衡二叉树](https://leetcode-cn.com/problems/balanced-binary-tree/)
22+
23+
- [ ] [111. 二叉树的最小深度](https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/)
24+
2125
- [ ] [112. 路径总和 --Easy](https://leetcode-cn.com/problems/path-sum/)
2226

2327
- [ ] [115. 不同的子序列 --Hard](https://leetcode-cn.com/problems/distinct-subsequences/)

src/pp/arithmetic/Util.java

+31
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import pp.arithmetic.model.ListNode;
55
import pp.arithmetic.model.TreeNode;
66

7+
import java.util.ArrayDeque;
78
import java.util.List;
9+
import java.util.Queue;
810
import java.util.Random;
911

1012
/**
@@ -102,6 +104,35 @@ public static TreeNode generateTreeNode() {
102104
return root;
103105
}
104106

107+
public static TreeNode generateTreeNode(Integer[] nodes) {
108+
if (nodes == null || nodes.length == 0 || nodes[0] == null) return null;
109+
TreeNode root = new TreeNode(nodes[0]);
110+
Queue<TreeNode> stack = new ArrayDeque<>();
111+
stack.add(root);
112+
int length = 1;
113+
while (length < nodes.length) {
114+
TreeNode poll = stack.poll();
115+
if (poll == null) break;
116+
Integer node = nodes[length];
117+
if (node!=null) {
118+
TreeNode left = new TreeNode(node);
119+
poll.left = left;
120+
stack.add(left);
121+
}
122+
length++;
123+
if (length < nodes.length) {
124+
node=nodes[length];
125+
if (node!=null) {
126+
TreeNode right = new TreeNode(node);
127+
poll.right = right;
128+
stack.add(right);
129+
}
130+
length++;
131+
}
132+
}
133+
return root;
134+
}
135+
105136
public static void printArray(int[] nums) {
106137
for (int i = 0; i < nums.length; i++) {
107138
System.out.print(nums[i] + " ");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package pp.arithmetic.leetcode;
2+
3+
import javafx.util.Pair;
4+
import pp.arithmetic.Util;
5+
import pp.arithmetic.model.TreeNode;
6+
7+
/**
8+
* Created by wangpeng on 2019-12-12.
9+
* 110. 平衡二叉树
10+
*
11+
* 给定一个二叉树,判断它是否是高度平衡的二叉树。
12+
*
13+
* 本题中,一棵高度平衡二叉树定义为:
14+
*
15+
* 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
16+
*
17+
* 示例 1:
18+
*
19+
* 给定二叉树 [3,9,20,null,null,15,7]
20+
*
21+
* 3
22+
* / \
23+
* 9 20
24+
* / \
25+
* 15 7
26+
* 返回 true 。
27+
*
28+
* 示例 2:
29+
*
30+
* 给定二叉树 [1,2,2,3,3,null,null,4,4]
31+
*
32+
* 1
33+
* / \
34+
* 2 2
35+
* / \
36+
* 3 3
37+
* / \
38+
* 4 4
39+
* 返回 false 。
40+
*
41+
* 来源:力扣(LeetCode)
42+
* 链接:https://leetcode-cn.com/problems/balanced-binary-tree
43+
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
44+
*/
45+
public class _110_isBalanced {
46+
47+
public static void main(String[] args) {
48+
_110_isBalanced isBalanced = new _110_isBalanced();
49+
TreeNode treeNode = Util.generateTreeNode(new Integer[]{3, 9, 20, null, null, 15, 7});
50+
System.out.println(isBalanced.isBalanced(treeNode));
51+
TreeNode treeNode2 = Util.generateTreeNode(new Integer[]{1,2,2,3,3,null,null,4,4});
52+
System.out.println(isBalanced.isBalanced(treeNode2));
53+
}
54+
55+
/**
56+
* 解题思路:
57+
* 1、递归计算左右子树的高度
58+
* 2、取左右子树的最大高度+1,即是该根节点的高度
59+
* 3、由于每个节点都需要满足高度平衡二叉树的条件,所以递归返回一个Pair<Boolean,Integer>
60+
* @param root
61+
* @return
62+
*/
63+
public boolean isBalanced(TreeNode root) {
64+
return dfs(root).getKey();
65+
}
66+
67+
private Pair<Boolean, Integer> dfs(TreeNode root) {
68+
if (root == null) return new Pair<>(true, 0);
69+
Pair<Boolean, Integer> left = dfs(root.left);
70+
Pair<Boolean, Integer> right = dfs(root.right);
71+
return new Pair<>(left.getKey() && right.getKey() && (Math.abs(left.getValue() - right.getValue()) <= 1), Math.max(left.getValue(), right.getValue()) + 1);
72+
}
73+
}

0 commit comments

Comments
 (0)