LeetCode 30 days Challenge - Day 11
本系列将对LeetCode新推出的30天算法挑战进行总结记录,旨在记录学习成果、方便未来查阅,同时望为广大网友提供帮助。
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 | 1 |
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.
Solution
题目要求分析:给定一棵二叉树,要求找到它的直径。二叉树直径定义为其中距离最远的两个节点之间的距离。
解法:
由题,我们知道直径不一定经过当前树的根结点。
因此,对以当前结点为根结点的(子)树,根据是否经过其根结点,可以分为两种情况,递归思想如下:
- 对于非空结点,计算:
- 左子树的深度 + 右子树的深度 = 经过当前结点的最长距离;
- 左子树的直径(递归,不经过根结点);
- 右子树的直径(递归,不经过根结点);
- 对以上三值,取最大值即为以当前结点为根的二叉树的直径。
1 | int getdepth(TreeNode* root) { |
Karl