leetcode 543. 二叉树的直径
2020-03-15 18:22
621 查看
leetcode 543. 二叉树的直径
题目详情
题目链接
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。
- 示例:
给定二叉树
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
注意:两结点之间的路径长度是以它们之间边的数目表示。
我的代码
#include <vector> #include <algorithm> using namespace std; // Definition for a binary tree node. struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Solution { public: int res = 0; int getHeight(TreeNode *pNode) { if ((pNode->left == NULL) && (pNode->right == NULL)) { return 0; } if ((pNode->left != NULL) && (pNode->right != NULL)) { return max(getHeight(pNode->left), getHeight(pNode->right)) + 1; } if (pNode->left != NULL) { return 1 + getHeight(pNode->left); } else { return 1 + getHeight(pNode->right); } } int getRootDistance(TreeNode* root) { int leftHeight = root->left == NULL? 0: getHeight(root->left) + 1; int rightHeight = root->right == NULL? 0: getHeight(root->right) + 1; return leftHeight + rightHeight; } int diameterOfBinaryTree(TreeNode* root) { if (root == NULL) { return 0; } res = max(res, getRootDistance(root)); if (root->left != NULL) { diameterOfBinaryTree(root->left); } if (root->right != NULL) { diameterOfBinaryTree(root->right); } return res; } };
我的成绩
执行结果:通过
执行用时 :60 ms, 在所有 C++ 提交中击败了13.16%的用户
内存消耗: 43.6 MB, 在所有 C++ 提交中击败了5.16%的用户
一些想法
- 最长直径不一定过根节点,所以必须比较所有内部节点的经过的最长直径。
- 递归时要善于使用全局变量
执行用时为 0 ms 的范例
// An highlighted block /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: int ans; int diameterOfBinaryTree(TreeNode* root) { ans = 1; depth(root); return ans - 1; } int depth(TreeNode *node) { if(node == NULL) return 0; int L = depth(node->left); int R = depth(node->right); ans = max(ans, L + R + 1); return max(L, R) + 1; } };
思考
- 我的代码过于冗余,进行了多次没必要的遍历。
- 要善于使用全局变量。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Leetcode 543. 二叉树的直径-----python
- leetcode 543. 二叉树的直径
- leetcode解题之543. Diameter of Binary Tree Java版 (二叉树的最大直径)
- [LeetCode] 543. Diameter of Binary Tree 二叉树的直径
- [LeetCode]543. Diameter of Binary Tree(计算二叉树的直径的长度)
- LeetCode 543. Diameter of Binary Tree (二叉树的直径)
- leetcode-543 二叉树的直径 Python
- [LeetCode] Diameter of Binary Tree 二叉树的直径
- leetcode_104题——Maximum Depth of Binary Tree (二叉树,递归,队列,还有递归没想出来)
- LeetCode(124) Binary Tree Maximum Path Sum 二叉树的最大路径和 (如何递归?)
- Leetcode中几道二叉树题 II
- LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal (用中序和后序树遍历来建立二叉树)
- LeetCode 105. 从前序与中序遍历序列构造二叉树
- LeetCode-94-Binary Tree Inorder Traversal 中序遍历二叉树
- [LeetCode] 144. Binary Tree Preorder Traversal 二叉树的先序遍历
- leetcode 226 Invert Binary Tree 翻转二叉树
- Leetcode 654.最大二叉树
- 数据结构Step by Step之树(1)- 二叉树 前序、中序、后序 LeetCode105根据前序中序的顺序构造树
- Binary Tree Level Order Traversal II 二叉树按层遍历(反向输出)@LeetCode
- leetcode 124 【树直径】