543. 二叉树的直径
突然间发现现在刷的题好多都和大一时学的数据结构密切相关,比如说这道题就用到的深度优先搜索算法。
题解:
以根节点为例,我们通过遍历左边的深度就可以得到当前左子树的长度,然后再遍历其右边,就可以得到右子树的长度,然后再将其两者加起来,在每一次递归遍历时进行比较,是不是就可以找出其最大长度了?
代码:
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {int ans=0; //全局变量int depth(TreeNode *rt){if(rt==nullptr) return 0;int L=depth(rt->left);int R=depth(rt->right);ans=max(ans,L+R);return max(L,R)+1; //递归结束后返回的操作}
public:int diameterOfBinaryTree(TreeNode* root) {ans=0;depth(root);return ans;}
};
祝你生活愉快~
刷题快乐哦~