zoukankan      html  css  js  c++  java
  • 222. 完全二叉树的节点个数 (JAVA)

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

    说明:

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

    示例:

    输入:
    1
    /
    2 3
    / /
    4 5 6

    输出: 6

    思路:利用完全二叉树的特性,求高度只需看左子树 -> 二分法

    • 计算某节点的左子的左屋檐 ,右子的左屋檐
    • 左边 == 右边,说明左边是完全的,直接公式
    • 左边 > 右边,说明右边是完全的,直接公式
    /**
     * 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;
            }
            int leftHeight = getHeight(root.left);
            int rightHeight = getHeight(root.right);
            if(leftHeight == rightHeight) {
                return (1 << leftHeight) + countNodes (root.right);
            } else {
                return (1 << rightHeight) + countNodes (root.left);
            }
        }
    
        public int getHeight(TreeNode node) {
            int height = 0;
            while(node != null) {
                height++;
                node = node.left;
            }
            return height;
        }
    }
  • 相关阅读:
    使用SELECT语句检索数据
    redis的安装和使用【2】redis的java操作
    Python之数据结构改造
    InnoDB undo log物理结构的初始化
    Redis-RDB持久化设置
    MySql(四)Select条件查询
    Node.js TLS/SSL
    Node.js 定时器
    Node.js 系统
    Node.js 字符串解码器
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/13818027.html
Copyright © 2011-2022 走看看