diff --git a/python/problem_543/README.md b/python/problem_543/README.md new file mode 100644 index 0000000..950da68 --- /dev/null +++ b/python/problem_543/README.md @@ -0,0 +1,27 @@ +# 543. Diameter of Binary Tree + +Given the root of a binary tree, return the length of the diameter of the tree. + +The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root. + +The length of a path between two nodes is represented by the number of edges between them. + + + +Example 1: + +Input: root = [1,2,3,4,5] +Output: 3 +Explanation: 3 is the length of the path [4,2,1,3] or [5,2,1,3]. + +Example 2: + +Input: root = [1,2] +Output: 1 + + + +Constraints: + + The number of nodes in the tree is in the range [1, 104]. + -100 <= Node.val <= 100 diff --git a/python/problem_543/solution1.py b/python/problem_543/solution1.py new file mode 100644 index 0000000..00de533 --- /dev/null +++ b/python/problem_543/solution1.py @@ -0,0 +1,30 @@ +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int: + diameter = 0 + + def longest_path(node): + # nonlocal to access the diameter when doing recursion + nonlocal diameter + # if no child + if not node: + return 0 + + # calculate the longest path for left and right + left_longest = longest_path(node.left) + right_longest = longest_path(node.right) + + # check if its bigger than diameter + diameter = max(diameter, left_longest + right_longest) + + # add the edge to parent while returning + return max(left_longest, right_longest) + 1 + + # do post-tree traversal + longest_path(root) + return diameter