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;
        }
    }
    
    
    不一样的烟火
  • 相关阅读:
    PaoptMap
    NES游戏常用汇编指令
    JS_XMLHttpRequest
    Function Evaluation
    exists的用法
    我的博客园博客开通咯(qyl)
    数据库访问类(Sql)
    Show一下自己的编程工具
    Ajax.net使用初体验
    WEB打印代码大全(NEW!!)
  • 原文地址:https://www.cnblogs.com/cstdio1/p/13339047.html
Copyright © 2011-2022 走看看