class Solution { public: int res = 0; int dfs(TreeNode* cur) { if(cur == nullptr) { return 0; } int leftNode = dfs(cur->left);//以 root的左子节点 为起点 的最长同值路径长度 int rightNode = dfs(cur->right); //以 root的右子节点 为起点 的最长同值路径长度 if(cur->left != nullptr && cur->val == cur->left->val) // leftNode表示,以root节点为起点 向左节点延伸 的最长同值路径长度 { // 如果root->left->val != root->val 那么一个点路径长是0 ++leftNode; } else { leftNode = 0; } if(cur->right != nullptr && cur->val == cur->right->val)// rightNode表示,以root节点为起点 向右节点延伸 的最长同值路径长度 { ++rightNode; } else { rightNode = 0; } res = max(res, leftNode + rightNode); // leftNode + rightNode就表示在以root为根节点的树上,经过root节点的最长同值路径的长度 return max(leftNode, rightNode);//leftNode和rightNode中的最大值,表示以root节点为起点的最长同值路径长度 } int longestUnivaluePath(TreeNode* root) { dfs(root); return res;// +1 与 -1 抵消 } };
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)