NC195. 二叉树的直径
描述
示例1
输入:
{1,2,3,#,#,4,5}
输出:
3
示例2
输入:
{1,2,3,#,#,4,5,9,#,#,6,#,7,#,8}
输出:
6
示例3
输入:
{1,2,3}
输出:
2
C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-04-21
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型 */ int ans = 0; int check(TreeNode *root) { if (!root) return 0; int left = check(root->left); int right = check(root->right); ans = max(ans, (left + right + 1)); return max(left, right) + 1; } int diameterOfBinaryTree(TreeNode* root) { if (!root) return 0; if (!root->left && !root->right) return 1; check(root); return ans - 1; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 408KB, 提交时间: 2022-01-23
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { private: int max_path = 0; public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型 */ int GetPath(TreeNode* root) { if (!root) { return 0; } int left_path = GetPath(root->left); int right_path = GetPath(root->right); max_path = max(max_path, left_path + right_path); return max(left_path, right_path) + 1; } int diameterOfBinaryTree(TreeNode* root) { GetPath(root); return max_path; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 412KB, 提交时间: 2022-03-11
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型 */ int maxdeep(TreeNode *root){ if(!root) return 0; return max(maxdeep(root->left),maxdeep(root->right))+1; } int diameterOfBinaryTree(TreeNode* root) { if(!root) return 0; return max(max(maxdeep(root->left),maxdeep(root->right)),maxdeep(root->left)+maxdeep(root->right)); } };
C 解法, 执行用时: 3ms, 内存消耗: 416KB, 提交时间: 2022-07-25
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; * * C语言声明定义全局变量请加上static,防止重复定义 */ int dep(struct TreeNode *root, int *max) { if (root == NULL) { return 0; } int leftDep = dep(root->left, max); int rightDep = dep(root->right, max); if (*max < leftDep + rightDep) { *max = leftDep + rightDep; } return leftDep > rightDep ? leftDep+1 : rightDep+1; } /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型 */ int diameterOfBinaryTree(struct TreeNode *root) { // write code here int max = 0; dep(root, &max); return max; }
C++ 解法, 执行用时: 3ms, 内存消耗: 420KB, 提交时间: 2022-02-08
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: /* 方法一:递归 求取树深过程中维护直径的最大值 */ int diameterOfBinaryTree(TreeNode* root) { getDepth(root); return maxPath; } private: int maxPath = 0; int getDepth(TreeNode* root) { if (!root) return 0; int left_path = getDepth(root->left); int right_path = getDepth(root->right); maxPath = max(maxPath, left_path + right_path); return max(left_path, right_path) + 1; } };