用一个vector来记录遍历到某一节点后,它的路径上的所有结点值,只要当前节点值比它们都大,则为好节点。遍历顺序为前序遍历,因为是从根节点往下,每个子节点都能拿到它的路径节点值。
#include <algorithm>/*** 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:vector<int> curr;int res = 0;void get_res(TreeNode* root) {if (!root) return;if (curr.size() == 0) {res++;} else {auto it = max_element(curr.begin(), curr.end());int max = *it;if (root->val >= max) res++;}curr.emplace_back(root->val);get_res(root->left);get_res(root->right);curr.pop_back();}int goodNodes(TreeNode* root) {// 对每一个节点,按顺序记录走到它的所有节点的值get_res(root);return res;}
};