题目描述:543
思路:
首先二叉树一般用递归,要考虑终止循环条件。
二叉树直径 = max(节点左子树深度+节点右子树深度,左子树的直径, 右子树的直径 )
节点深度 = 1 + max(左子树深度, 右子树深度)
简单点可以只在求最大深度时候递归
1 全局变量res保存结果
2 对root求最大深度
求节点最大深度的函数:
1 求左子树最大深度left
2 求右子树最大深度right
3 计算当前节点的直径 temp = left+right,判断temp是否大于res,维护全局变量res
4 返回当前节点深度 1 + max(left, right)
实现:
class Solution {
public:
int diameterOfBinaryTree(TreeNode* root) {
int res = 0;
helper(root, res);
return res;
}
int helper(TreeNode* root, int& res){
if(!root) return 0;
int left = helper(root->left, res);
int right = helper(root->right, res);
re