(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); } }