zoukankan      html  css  js  c++  java
  • 完全二叉树的节点个数 Count Complete Tree Nodes

    2018-09-25 16:36:25

    问题描述:

    问题求解:

    单纯遍历了一遍,emmm,果然TLE。

    解题思路就是比较左边树高度和右边树高度,如果相等,那么就是一个满二叉树,返回1 << h - 1即可,如果不是,则递归的计算左右子树的个数。

    时间复杂度:O(logn * logn)

        public int countNodes(TreeNode root) {
            if (root == null) return 0;
            int l = leftHeight(root);
            int r = rightHeight(root);
            if (l == r) return (1 << l) - 1;
            else return 1 + countNodes(root.left) + countNodes(root.right);
        }
        
        private int leftHeight(TreeNode root) {
            if (root == null) return 0;
            return 1 + leftHeight(root.left);
        }
        
        private int rightHeight(TreeNode root) {
            if (root == null) return 0;
            return 1 + rightHeight(root.right);
        } 

    2019-04-15 14:42:44

    其实我根本不用管二叉树的种类,直接递归去计数就可以了,在log(n)的时间复杂度内完成,且速度完胜之前的解法。

    Runtime: 0 ms, faster than 100.00% of Java online submissions for Count Complete Tree Nodes.

        public int countNodes(TreeNode root) {
            if (root == null) return 0;
            return countNodes(root.left) + countNodes(root.right) + 1;
        }
    
  • 相关阅读:
    MYSQL常用DDL
    MYSQL字符串与数字比较出现的异常
    目 录
    动态规划
    初级排序和高级排序
    ACMer计划2(非原创)
    1、常用C++STL集合
    1.2常见C++STL 映射表
    「CEOI2021」 Newspapers 题解 翻译
    Border Theory 学习笔记
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/9700321.html
Copyright © 2011-2022 走看看