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

  • 题目描述

    说明:
    
    完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
    
    示例:
    
    输入: 
        1
       / \
      2   3
     / \  /
    4  5 6
    
    输出: 6
    
  • 分析:二叉树的左右子树都是二叉树,故二叉树的相关问题一般基于分而治之的思路来求解,即大问题拆为多个子问题来求解。在实现层面,分而治之一般结合递归来实现,递归需要包含一个退出条件,而退出条件一般是基于最简单的情况来设计。针对这个完全二叉树的节点个数求解问题,最简单的情况是根节点都不存在,则节点个数为0,其次是只有根节点,则节点个数为1,然后是递归求解左右子树,具体实现如下:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public int countNodes(TreeNode root) {
            if (root==null) {
                return 0;
            }
            if (root.left==null && root.right==null) {
                return 1;
            }
            return countNodes(root.left)+countNodes(root.right)+1;
        }
    }
    

你可能感兴趣的:(LeetCode)