【LeetCode 222】Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务

112 阅读1分钟

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);
    }
};

四、总结

该题为常见的数据结构中等题,需要我们多多练习,熟练掌握,才能再更多场景发挥它的作用。