(Tree) Diameter of Binary Tree
14 Nov 2019 | algorithm programming leetcode두 노드 사이의 길이가 가장 긴 길이를 찾는 것이다.
일반적으로 그래프를 루트부터 탐색하는 방법과는 조금 다르다.
모든 노드를 순회하며, 왼쪽 서브트리의 최대뎁스와 오른쪽 서브트리의 최대뎁스를 합친것의 최대뎁스를 구하면 된다.
class Solution {
int maxDepth = Integer.MIN_VALUE;
private int getDepth(TreeNode node, int depth) {
if (node == null) {
return depth;
}
return Math.max(getDepth(node.left, depth + 1), getDepth(node.right, depth + 1));
}
private void getMaxDepth(TreeNode node) {
if (node == null) {
return;
}
int left = getDepth(node.left, 0);
int right = getDepth(node.right, 0);
int sum = left + right;
if (maxDepth < sum) {
maxDepth = sum;
}
getMaxDepth(node.left);
getMaxDepth(node.right);
}
public int diameterOfBinaryTree(TreeNode root) {
if (root == null) return 0;
if (root.left == null && root.right == null) return 0;
getMaxDepth(root);
return maxDepth;
}
}
아래처럼 개선 가능하다.
class Solution {
private int max = 1;
public int diameterOfBinaryTree(TreeNode root) {
helper(root);
return max - 1;
}
private int helper(TreeNode root) {
if (root == null) return 0;
int left = helper(root.left);
int right = helper(root.right);
max= Math.max(max, 1 + left + right);
return 1 + Math.max(left, right);
}
}