二叉树之下

leetcode 222. 完全二叉树的节点个数

2019-04-20  本文已影响20人  topshi

题目描述

给出一个完全二叉树,求出该树的节点个数。
相关话题: 树、二分查找   难度: 中等
说明:
完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含1~ 2h 个节点。

示例:

class Solution {
    public int countNodes(TreeNode root) {
        return countNodes(root,0);
    }
    public int countNodes(TreeNode root,int count) {
       //这个返回条件就是个大大的错误
        if(root == null) return count;//返回一条路径的节点总数
        count += 1;
        return countNodes(root.left,count) + countNodes(root.right,count);
    }
}

这样必定会算了很多重复的节点,貌似不好确定边界,除非定义一个数组类型的变量通过先序遍历每遍历到一个节点累加1。

class Solution {
    public int countNodes(TreeNode root) {
        return countNodes(root,new int[1]);
    }
    public int countNodes(TreeNode root,int[] count) {
        if(root == null) return 0;
        count[0] += 1;
        countNodes(root.left,count);
        countNodes(root.right,count);
        return count[0];
    }
}
class Solution {
    public int countNodes(TreeNode root) {
        if(root == null) return 0;
        return countNodes(root.left) + countNodes(root.right) + 1;
    }
}

总结:递归使我懵逼,研究返回条件和返回后的状态。

上一篇 下一篇

猜你喜欢

热点阅读