543. 二叉树的直径
Ideas这题貌似也在左神算法里见过。
基本思想就是递归,根节点从左子树获得一个想要的信息,从右子树获得一个想要的信息,然后对两个信息进行处理。
其实可以把直径分成两半看:从根节点到左子树的叶子结点的最长路径+根节点到右子树的叶子结点的最长路径-1。
然后就简单了,问题就转变成了求二叉树的深度。
Code C++class Solution { int ans = 1; int depth(TreeNode* rt) { if (rt == NULL) { return 0; } int l_depth = depth(rt->left); int r_depth = depth(rt->right); ans = max(ans, l_depth + r_depth + 1); return max(l_depth, r_depth) + 1; } public: int diameterOfBinaryTree(TreeNode* root) { depth(root); return ans - 1; } };