LeetCode:40.二叉树的直径
目录
1.二叉树的直径
1.二叉树的直径
假设我们知道对于该节点的左子树向下遍历经过最多的节点数 left和其孩子向下遍历经过最多的节点数 right ,那么以该节点为起点的路径经过节点数的最大值即为 left+right+1 。
我们记节点 node 为起点的路径经过节点数的最大值为 dnode ,那么二叉树的直径就是所有节点 dnode的最大值减一
具体的操作为:我们定义一个递归函数 depth(node) 计算 dnode,函数返回该节点为根的子树的深度。先递归调用左子树和右子树求得它们为根的子树的深度 left 和 right ,则该节点为根的子树的深度即为max(left,right)+1,该节点的 dnode值为left+right+1,递归搜索每个节点并设一个全局变量 ans 记录 dnode的最大值,最后返回 ans-1 即为树的直径
class Solution {int ans;
public:int depth(TreeNode* root){if(root == nullptr)return 0;int left = depth(root->left);int right = depth(root->right);ans = max(ans, left + right + 1);return max(left, right) + 1;}int diameterOfBinaryTree(TreeNode* root) {ans = 1;depth(root);return ans - 1;}
};