Diameter of Binary Tree
2017-09-15 11:02
253 查看
求树的直径,其实就是对于每个节点左右子树深度和的最大值。
例如:
左边深度加右边深度,可知为3。但要注意下面的情况:
这时有个子节点的深度和(8)和已经超过根节点深度和(7)。
=============================
想法是对于每个节点的左右子树深度相加,取其中的最大值:
然而这样嵌套递归效率不高。
然后是别人家的代码:
思路差不多,取左子树的最大深度,取右子树的最大深度,两者相加。
例如:
左边深度加右边深度,可知为3。但要注意下面的情况:
这时有个子节点的深度和(8)和已经超过根节点深度和(7)。
=============================
想法是对于每个节点的左右子树深度相加,取其中的最大值:
class Solution { public: int diameterOfBinaryTree(TreeNode* root) { if(!root) return 0; int leftH = 0, rightH = 0; if(root->left) leftH = getHeight(root->left); if(root->right) rightH = getHeight(root->right); return max((leftH + rightH), max(diameterOfBinaryTree(root->left), diameterOfBinaryTree(root->right))); } private: int getHeight(TreeNode* root) { if(!root) return 0; int left = getHeight(root->left); int right = getHeight(root->right); return left > right ? (left + 1) : (right + 1); } };
然而这样嵌套递归效率不高。
然后是别人家的代码:
public class Solution { public: int diameterOfBinaryTree(TreeNode root) { maxDepth(root); return max; } private: int max = 0; int maxDepth(TreeNode root) { if (root == null) return 0; int left = maxDepth(root.left); int right = maxDepth(root.right); max = max(max, left + right);//左右子树最大深度相加 return max(left, right) + 1;//取最大深度 } }
思路差不多,取左子树的最大深度,取右子树的最大深度,两者相加。
相关文章推荐
- Diameter of Binary Tree
- leetcode编程记录9 #543 Diameter of Binary Tree
- leetcode[Diameter of Binary Tree]//待整理多种解法
- Diameter of Binary Tree
- LeetCode 543---- Diameter of Binary Tree
- [LeetCode] Diameter of Binary Tree 二叉树的直径
- Diameter of Binary Tree
- The diameter of a binary tree
- leetcode543 Diameter of Binary Tree
- 【Leetcode-easy-543】Diameter of Binary Tree
- LeetCode - 543 - Diameter of Binary Tree
- LeetCode.543 Diameter of Binary Tree
- Diameter of Binary Tree
- The diameter of a binary tree
- LeetCode——Diameter of Binary Tree
- leetcode(543). Diameter of Binary Tree
- LeetCode OJ 543 Diameter of Binary Tree [Easy]
- LeetCode 543 Diameter of Binary Tree
- Data Structure Binary Tree: Diameter of a Binary Tree
- 【LeetCode】Diameter of Binary Tree 解题报告