[路飞]_leetcode刷题_完全二叉树的节点个数

171 阅读1分钟

题目

完全二叉树的节点个数

给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。

示例 1:

image.png

输入:root = [1,2,3,4,5,6]
输出:6

示例 2:

输入:root = []
输出:0

示例 3:

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

思路1:

深度优先搜索整个二叉树即可。这里以前序遍历为例。

代码如下:

var countNodes = function(root) {
    count = 0;
    countNode(root);
    return count;
};

function countNode(root){
    if(root == null) return null;
    count++;
    countNode(root.left)
    countNode(root.right)
}

代码可以写的更精简一点如下:

/**
 * @param {TreeNode} root
 * @return {number}
 */

var countNodes = function(root) {
    if(root == null){
        return 0
    }
    return 1 + countNodes(root.left) + countNodes(root.right)
};

思路2:

广度优先搜索整个二叉树,这里以层序遍历为例

代码如下:

function countNodes(root) {
    let res = 0;
    if(root == null) return res;
    let queue = [];
    queue.push(root);
    while(queue.length>0){
        let size = queue.length;
        res += size;
        while(size>0){
            let node = queue.pop();
            if(node.left) queue.push(node.left);
            if(node.right) queue.push(node.right);
            size--
        }
    }
    return res;
}

思路3:

位运算,这个后续学习一下补上