给你一棵二叉树的根节点,返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root
。
两节点之间路径的 长度 由它们之间边数表示。
示例 1:
输入:root = [1,2,3,4,5] 输出:3 解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。
示例 2:
输入:root = [1,2] 输出:1
/** * 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 { public: int ans = 0; int diameterOfBinaryTree(TreeNode* root) { //本质上是计算每个节点的直径(即其左右子树深度之和),再统计出最大值 depth(root); return ans; } int depth(TreeNode* root){ if(root==nullptr){ return 0;//访问到空节点,返回0 } int L = depth(root->left);// 左儿子为根的子树的深度 int R = depth(root->right);// 右儿子为根的子树的深度 ans = max(ans,L+R);//// 计算该节点的直径,即L+R,并更新ans return max(L,R)+1;//返回以该节点为根的子树的深度 } };
标签:right,TreeNode,递归,int,二叉树,直径,root,节点,left From: https://www.cnblogs.com/yueshengd/p/18628154