From a0dadd9563d507bf8be1835387d8e0140264ec3c Mon Sep 17 00:00:00 2001 From: Kaushik Narayan R Date: Fri, 3 Nov 2023 09:53:51 -0700 Subject: [PATCH] day 31: 543-diameter-of-binary-tree --- 543-diameter-of-binary-tree/driver.cpp | 17 +++++++++++++++++ 543-diameter-of-binary-tree/soln.cpp | 25 +++++++++++++++++++++++++ 543-diameter-of-binary-tree/soln.hpp | 19 +++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 543-diameter-of-binary-tree/driver.cpp create mode 100644 543-diameter-of-binary-tree/soln.cpp create mode 100644 543-diameter-of-binary-tree/soln.hpp diff --git a/543-diameter-of-binary-tree/driver.cpp b/543-diameter-of-binary-tree/driver.cpp new file mode 100644 index 0000000..62a7fc7 --- /dev/null +++ b/543-diameter-of-binary-tree/driver.cpp @@ -0,0 +1,17 @@ +#include "soln.hpp" + +int main() +{ + // input + TreeNode n1 = TreeNode(1); + TreeNode n3 = TreeNode(3); + TreeNode n6 = TreeNode(6); + TreeNode n9 = TreeNode(9); + TreeNode n2 = TreeNode(2, &n1, &n3); + TreeNode n7 = TreeNode(7, &n6, &n9); + TreeNode n4 = TreeNode(4, &n2, &n7); + int answer = 4; + Solution soln; + cout << "Found diameter correctly? " << soln.test(&n4, answer) << endl; + return 0; +} \ No newline at end of file diff --git a/543-diameter-of-binary-tree/soln.cpp b/543-diameter-of-binary-tree/soln.cpp new file mode 100644 index 0000000..a4836f5 --- /dev/null +++ b/543-diameter-of-binary-tree/soln.cpp @@ -0,0 +1,25 @@ +#include "soln.hpp" + +int Solution::diameterOfBinaryTree(TreeNode *root) +{ + int max_dia = 0; + height(root, max_dia); + return max_dia; +} + +int Solution::height(TreeNode *subroot, int &max_dia) +{ + if (!subroot) + return 0; + int left_child_height = height(subroot->left, max_dia); + int right_child_height = height(subroot->right, max_dia); + // max_dia for all in this subtree is left_h + right_h, so check global maximum + max_dia = max(max_dia, left_child_height + right_child_height); + // for height, we add the edge connecting this subtree to max of child heights + return 1 + max(left_child_height, right_child_height); +} + +bool Solution::test(TreeNode *root, int answer) +{ + return diameterOfBinaryTree(root) == answer; +} \ No newline at end of file diff --git a/543-diameter-of-binary-tree/soln.hpp b/543-diameter-of-binary-tree/soln.hpp new file mode 100644 index 0000000..db6e560 --- /dev/null +++ b/543-diameter-of-binary-tree/soln.hpp @@ -0,0 +1,19 @@ +#include +using namespace std; + +struct TreeNode +{ + int val; + TreeNode *left; + TreeNode *right; + TreeNode() : val(0), left(nullptr), right(nullptr) {} + TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} + TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} +}; +class Solution +{ +public: + int diameterOfBinaryTree(TreeNode *root); + int height(TreeNode *subroot, int &max_dia); + bool test(TreeNode *root, int answer); +}; \ No newline at end of file