- DFS
- 没有返回值
max在递归时要慎重用引用,因为在回溯时可能不能改变max;
因为节点的值可能有负数,所以最大值从根节点开始,根节点一定是好节点。
int goodNum=0; void dfs(TreNode* root,int max){ if(!root)return ; if(root->val>=max){ goodNum++; max=root->val; } dfs(root->left,max); dfs(root->right,max); } dfs(root,root->val); return goodNuml;
-
- 有返回值
int dfs(TreeNode* root,int max_data){ if(!root)return 0; int goodNum=root->val>=max_data?1:0; if(goodNum)max_data=root->val; goodNum+=dfs(root->left,max_data);//左子树的好节点个数 goodNum+=dfs(root->right,max_data);//右子树好节点个数 return goodNum;总的个数 } int goodNodes(TreeNode* root) { return dfs(root,root->val); } //算最大深度 int MaxDepth(TreeNode* root){ if(!root)return 0; return max(MaxDepth(root->left),MaxDepth(root->right))+1;//左子树和右子树的最大深度加一 }