zoukankan      html  css  js  c++  java
  • 完全二叉树节点个数

    1、没利用完全二叉树性质的递归

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

    2、因为完全二叉树只有最后一层不是满的。
    1.1、左子树不是满二叉树,右子树自然就是满二叉树了

    1.2、左子树是满二叉树,右子树不一定。

    /**
     * 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 left = countLevel(root.left);
            int right = countLevel(root.right);
            if(left == right){//左子树是满二叉树
                return countNodes(root.right) + (1<<left);//左子树加上根节点数目刚好是2^left,用位运算快一点
            }else{
                return countNodes(root.left) + (1<<right);//同理
            }
        }
        private int countLevel(TreeNode root){//可以帮助判断是否左子树是满二叉树
            int level = 0;
            while(root != null){
                level++;
                root = root.left;
            }
            return level;
        }
    }
    
    
    不一样的烟火
  • 相关阅读:
    最详细的hadoop2.2.0集群的HA高可靠的最简单配置
    HIVE 在执行大量数据JOIN的时候,容易产生内存不足的情况
    机器学习的学习笔记1
    AngularJS在IE8的支持
    OC 异常处理
    OC NSString练习
    OC继承
    OC--@property和@synthesize关键字
    OC输入输出
    OC数组和字典简单使用
  • 原文地址:https://www.cnblogs.com/cstdio1/p/13339047.html
Copyright © 2011-2022 走看看