一:题目
二:今天不上菜 上码了
方法一:前序遍历 求解
/**
* 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:
void preorder(TreeNode* root,vector<int>&v) {
if(root == NULL) return;
v.push_back(root->val);
preorder(root->left,v);
preorder(root->right,v);
}
int countNodes(TreeNode* root) {
/**
思路:这个也是我们遍历二叉树,采用一种遍历方式去统计其的个数(层序可以,先序也行)
*/
vector<int> ans;
preorder(root,ans);
return ans.size();
}
};
方法二:递归
/**
* 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
int getNums(TreeNode*root)
第二步:确定递归函数的终止条件
当节点遇到NULL就停止
if(root == NULL) return 0;(0代表没有个数)
第三步:确定单层递归逻辑
我们遍历左子树的节点数,再遍历右子树的节点数,然后再将左右节点数相加 再加1
(这个1代表的是中间的节点)
*/
int getNums(TreeNode* root){
if(root == NULL) return 0;
int leftNums = getNums(root->left);//左子树的个数 (左子树当中也会有左右子树 来统计个数)
int rightNums = getNums(root->right);//右子树的个数
int ans = leftNums+rightNums+1;//将左右子树的个数相加 + 中间的节点
return ans;
}
int countNodes(TreeNode* root) {
int ans = getNums(root);
return ans;
}
};
我讨厌递归 讨厌递归 我自己想不出来 可一看题解就会 一写题就废 菜鸡杰 菜透了
讨厌递归 讨厌递归 晚安!!!!!!!!!!!!!