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;
        }
    }
  • 相关阅读:
    Introspector
    jython awt demo
    java中dom解析xml
    【luogu1816】忠诚
    代码调试技巧【OI缩水版】
    【UOJ78】二分图最大匹配
    【51nod】最大子段和
    【LibreOJ109】【模板】并查集
    简单的卡常数【OI缩水版】
    QQbot
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/13818027.html
Copyright © 2011-2022 走看看