[LeetCode]543. Diameter of Binary Tree
题目描述
思路
最长路径必然是先从下往上,再从上往下,因此使用DFS,同时来维护一个最大值,在DFS的过程中,返回的是当前节点到左子节点对应的叶节点和右子节点对应的叶节点的最大距离,同时返回后与当前的maxLength比较,若左右子节点的和更大,则更新。
代码
#include <iostream>
#include <algorithm>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
int maxLength = 0;
int nodeDepth(TreeNode* node) {
if (!node)
return 0;
int lLength = nodeDepth(node->left);
int rLength = nodeDepth(node->right);
maxLength = max(maxLength, lLength + rLength);
return max(lLength + 1, rLength + 1);
}
int diameterOfBinaryTree(TreeNode* root) {
nodeDepth(root);
return maxLength;
}
};
int main() {
TreeNode* r1 = new TreeNode(1);
TreeNode* r2 = new TreeNode(1);
TreeNode* r3 = new TreeNode(1);
TreeNode* r4 = new TreeNode(1);
TreeNode* r5 = new TreeNode(1);
r1->left = r2;
r1->right = r3;
r2->left = r4;
r2->right = r5;
Solution s;
cout << s.diameterOfBinaryTree(r1) << endl;
system("pause");
}