Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务活动详情
一、题目描述
给定一棵完全二叉树,求其节点个数。
什么是完全二叉树呢?
一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。
二、思路分析
直接进行深度优先搜索(DFS),逐层搜索,然后自下而上地统计、返回节点的个数。
三、AC代码
/**
* 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 dfs(TreeNode* root){
if (root==NULL) return 0;
int l=dfs(root->left);
int r=dfs(root->right);
return l+r+1;
}
int countNodes(TreeNode* root) {
if (root==NULL) return 0;
return dfs(root);
}
};
四、总结
该题为常见的数据结构中等题,需要我们多多练习,熟练掌握,才能再更多场景发挥它的作用。