LeetCode 543. Diameter of Binary Tree
題目:
Given a binary tree, you need to compute 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.
Example:
Given a binary tree
1 / \ 2 3 / \ 4 5
Return 3, which is the length of the path [4,2,1,3] or [5,2,1,3].
Note: The length of path between two nodes is represented by the number of edges between them.
又是一道不會做的easy,菜菜。
思路大概和max depth差不多,一邊求max depth,一邊計算以當前這個root為root的max diameter,然後和全域性的max做比較。複雜度都是O(n)。
Runtime: 0 ms, faster than 100.00% of Java online submissions for Diameter of Binary Tree.
Memory Usage: 38.8 MB, less than 14.95% of Java online submissions for Diameter of Binary Tree.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
int numOfNodes = 0;
public int diameterOfBinaryTree(TreeNode root) {
if (root == null) {
return 0;
}
depth(root);
return numOfNodes - 1;
}
private int depth(TreeNode root) {
if (root == null) {
return 0;
}
int left = depth(root.left);
int right = depth(root.right);
numOfNodes = Math.max(numOfNodes, left + right + 1);
return Math.max(left, right) + 1;
}
}
另外一種做法和我的想法挺像的,就是root的max dia是左子樹的depth+右子樹的depth,然後遞迴求左右子節點的max dia,和root做比較。但是因為有重複計算所以效率挺低的。
Runtime: 9 ms, faster than 13.15% of Java online submissions for Diameter of Binary Tree.
Memory Usage: 38.7 MB, less than 14.95% of Java online submissions for Diameter of Binary Tree.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int diameterOfBinaryTree(TreeNode root) {
if (root == null) {
return 0;
}
int rootDiameter = depth(root.left) + depth(root.right);
int left = diameterOfBinaryTree(root.left);
int right = diameterOfBinaryTree(root.right);
return Math.max(rootDiameter, Math.max(left, right));
}
private int depth(TreeNode root) {
if (root == null) {
return 0;
}
int left = depth(root.left);
int right = depth(root.right);
return Math.max(left, right) + 1;
}
}
相關文章
- [LeetCode] 543. Diameter of Binary TreeLeetCode
- Leetcode Binary Tree PathsLeetCode
- LeetCode Invert Binary TreeLeetCode
- Leetcode Balanced Binary TreeLeetCode
- LeetCode-Binary Tree PathsLeetCode
- leetcode - Binary Tree Preorder TraversalLeetCode
- Leetcode Binary Tree Inorder TraversalLeetCode
- Leetcode Binary Tree Preorder TraversalLeetCode
- Leetcode Binary Tree Postorder TraversalLeetCode
- Leetcode Maximum Depth of Binary TreeLeetCode
- Leetcode-Balanced Binary TreeLeetCode
- Balanced Binary Tree leetcode javaLeetCodeJava
- LeetCode545.Boundary-of-Binary-TreeLeetCode
- Binary Tree Level Order Traversal [LEETCODE]LeetCode
- [leetcode]maximum-depth-of-binary-treeLeetCode
- [leetcode]binary-tree-inorder-traversalLeetCode
- LeetCode-Serialize and Deserialize Binary TreeLeetCode
- Leetcode Binary Tree Level Order TraversalLeetCode
- Leetcode Validate Binary Search TreeLeetCode
- Leetcode Minimum Depth of Binary TreeLeetCode
- Leetcode Binary Tree Maximum Path SumLeetCode
- Leetcode-Binary Tree Postorder TraversalLeetCode
- Leetcode-Binary Tree Inorder TraversalLeetCode
- Leetcode-Maximum Depth of Binary TreeLeetCode
- leetcode 之 Recover Binary Search TreeLeetCode
- Recover Binary Search Tree leetcode javaLeetCodeJava
- Binary Tree Inorder Traversal leetcode javaLeetCodeJava
- Binary Tree Preorder Traversal leetcode javaLeetCodeJava
- Binary Tree Postorder Traversal leetcode javaLeetCodeJava
- Maximum Depth of Binary Tree leetcode javaLeetCodeJava
- LeetCode 94 [Binary Tree Inorder Traversal]LeetCode
- LeetCode之Univalued Binary Tree(Kotlin)LeetCodeKotlin
- Leetcode 94. Binary Tree Inorder TraversalLeetCode
- LeetCode-Closest Binary Search Tree ValueLeetCode
- LeetCode-Binary Tree Vertical Order TraversalLeetCode
- LeetCode-Verify Preorder Serialization of a Binary TreeLeetCode
- LeetCode(110) Balanced Binary TreeLeetCode
- 【LeetCode】Flatten Binary Tree to Linked ListLeetCode