leetcode1448好节点深刻理解DFS+BFS

发布时间 2023-07-25 20:06:05作者: iu本u
  • 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;//左子树和右子树的最大深度加一    
}