LeetCode222. 完全二叉树的节点个数

1 题目描述

给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
示例 1:
LeetCode222. 完全二叉树的节点个数_第1张图片
输入:root = [1,2,3,4,5,6]
输出:6

示例 2:

输入:root = []
输出:0
示例 3:

输入:root = [1]
输出:1

来源:力扣(LeetCode)
链接:222. 完全二叉树的节点个数

2 算法设计

本题可有两种方法求完全二叉树的节点个数。一种就是通过后序遍历进行递归,分别求出左子树的节点个数和右子树的节点个数,最后左右子树节点个数相加之和再+1就是树的节点数。还有一种方式就是通过BFS迭代,类似于树的层序遍历。

3 代码实现

3.1 递归,后续遍历

public int countNodes(TreeNode root) {
   if (root == null) return 0;
  		 //递归左子树
       int letfNum = countNodes(root.left);
       //递归右子树
       int rightNum = countNodes(root.right);
       //左右子树的节点个数之和加上1个根节点
       int treeNum = letfNum+rightNum+1;
       return treeNum;
    }

3.2 迭代

public int countNodes(TreeNode root) {
         
        return getCount(root);
    }
    public int getCount(TreeNode root){
        if (root == null) return 0;
        List<Integer> list = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        int cnt = 0;
        while (!queue.isEmpty()){
            int len = queue.size();
            cnt+=len;
            while (len > 0){
                TreeNode tmpNode = queue.poll();
                if (tmpNode.left != null) queue.offer(tmpNode.left);
                if (tmpNode.right != null) queue.offer(tmpNode.right);
                len--;
            }
        }
        return cnt;
    }

4 测试结果

LeetCode222. 完全二叉树的节点个数_第2张图片

你可能感兴趣的:(算法,leetcode,算法,完全二叉树的节点个数)