Skip to content

Commit 21732e6

Browse files
author
Kohei Asai
authored
543. Diameter of Binary Tree (#70)
1 parent aa43a92 commit 21732e6

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import { createBinaryTreeNode } from "../utilities/TreeNode";
2+
import diameterOfBinaryTree from "./diameterOfBinaryTree";
3+
4+
describe("543. Diameter of Binary Tree", () => {
5+
test("#1", () => {
6+
expect(diameterOfBinaryTree(createBinaryTreeNode([1, 2, 3, 4, 5]))).toBe(3);
7+
});
8+
9+
test("#2", () => {
10+
expect(diameterOfBinaryTree(createBinaryTreeNode([1]))).toBe(0);
11+
});
12+
13+
test("#3", () => {
14+
expect(diameterOfBinaryTree(null)).toBe(0);
15+
});
16+
17+
test("#4", () => {
18+
expect(
19+
diameterOfBinaryTree(
20+
createBinaryTreeNode([
21+
4,
22+
-7,
23+
-3,
24+
null,
25+
null,
26+
-9,
27+
-3,
28+
9,
29+
-7,
30+
-4,
31+
null,
32+
6,
33+
null,
34+
-6,
35+
-6,
36+
null,
37+
null,
38+
0,
39+
6,
40+
5,
41+
null,
42+
9,
43+
null,
44+
null,
45+
-1,
46+
-4,
47+
null,
48+
null,
49+
null,
50+
-2
51+
])
52+
)
53+
).toBe(8);
54+
});
55+
});

solutions/diameterOfBinaryTree.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { TreeNode } from "../utilities/TreeNode";
2+
3+
// 543. Diameter of Binary Tree
4+
// https://leetcode.com/problems/diameter-of-binary-tree/
5+
export default function diameterOfBinaryTree<T>(
6+
node: TreeNode<T> | null
7+
): number {
8+
function getHeightAndDiameter(node: TreeNode<T> | null): [number, number] {
9+
if (node === null) return [-1, -1];
10+
11+
const [leftHeight, leftDiameter] = getHeightAndDiameter(node.left);
12+
const [rightHeight, rightDiameter] = getHeightAndDiameter(node.right);
13+
14+
return [
15+
Math.max(leftHeight, rightHeight) + 1,
16+
Math.max(leftHeight + rightHeight + 2, leftDiameter, rightDiameter)
17+
];
18+
}
19+
20+
if (!node) return 0;
21+
22+
return getHeightAndDiameter(node)[1];
23+
}

0 commit comments

Comments
 (0)