## [543\. Diameter of Binary Tree](https://leetcode.com/problems/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:** ![](https://assets.leetcode.com/uploads/2021/03/06/diamtree.jpg) **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` 算 Binary Tree 的直徑,dfs 解 ```cpp /** * Definition for a binary tree node. * 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 { private: int diameter = 0; public: int diameterOfBinaryTree(TreeNode* root) { dfs(root); return diameter; } int dfs(TreeNode* root) { if(!root) return 0; // 走訪左邊的 tree int left = dfs(root->left); // 走訪右邊的 tree int right = dfs(root->right); // 算最大的直徑 diameter = max(diameter, left + right); // 每次遞迴,要記得直徑 + 1 return 1 + max(left, right); } }; ``` :::success - 時間複雜度:$O(N)$ - 空間複雜度:$O(N)$ :::