leetcode: Count Complete Tree Nodes

来源:互联网 发布:青岛平面美工培训 编辑:程序博客网 时间:2024/05/21 17:24

求近似完全二叉树的节点数。  除了最后一层外,其余各层都是满的。换句话说,最右子结点和最左子结点相差最多一个高度。  若两个节点高度一致,则可说明此时root代表的树是完全的,根据公式,其节点数为(2^height)-1;否则,其左右子树中势必有一棵是满的,我们不妨递归其左右子树,这样可以减少一半的计算量。



/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public int countNodes(TreeNode root) {        TreeNode left = root,right = root;        int height=0;        while(right != null)        {            left = left.left;            right = right.right;            height++;        }        if( left == null )        {            return (1<<height)-1;        }        else        {            return 1+countNodes(root.left)+countNodes(root.right);        }    }}


0 0
原创粉丝点击