algorithm notes: leetcode#543 diameter of binary tree

Problem


Solution


Initial thoughts

Python implementation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class :
def diameterOfBinaryTree(self, root):
"""
:type root: TreeNode
:rtype: int
"""
def dfs(node):
if node is None:
return 0
left = dfs(node.left)
right = dfs(node.right)
self.ans = max(self.ans, left+right+1)
return max(left, right)+1
self.ans = 1
dfs(root)
return self.ans-1

Java implementation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class {
private int ans = 1;
private int dfs(TreeNode node){
if(node==null){ return 0; }
int left = dfs(node.left);
int right = dfs(node.right);
int temp = left + right + 1;
ans = temp > ans ? temp : ans;
int depth = left > right ? left : right;
return depth + 1;
}
public int diameterOfBinaryTree(TreeNode root) {
dfs(root);
return ans-1;
}
}

Time complexity

O(N).

Space complexity

O(N).


543. Diameter of Binary Tree
(中文版) 算法笔记: 力扣#543 二叉树的直径