1、深度遍历
考虑到二叉树的结构,题目实际上要求找到某个节点使左右子树中的边数最大。因此我们可以利用深度遍历递归求得每个节点的左右子节点的高度,最终记录以该节点为根节点的二叉树的直径。最终我们返回当前节点的高度用于下一步的递归。
class Solution {
public:
int maxLength = 0;
int dfs(TreeNode *root) {
if (!root) return 0;
int heightL = dfs(root->left);
int heightR = dfs(root->right);
maxLength = max(maxLength, heightL + heightR + 1);
return max(heightR, heightL) + 1;
}
int diameterOfBinaryTree(TreeNode *root) {
dfs(root);
return maxLength - 1;
}
};