一:题目
二:今天不上菜 上码了
方法一:前序遍历 求解
/*** 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:/**思路:递归三步曲第一步:确定递归函数的参数和返回值因为我们要递归的二叉树,所以肯定需要将根节点传入,因为我们要求是个数 返回类型为intint 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;}
};
我讨厌递归 讨厌递归 我自己想不出来 可一看题解就会 一写题就废 菜鸡杰 菜透了
讨厌递归 讨厌递归 晚安!!!!!!!!!!!!!