[LeetCode]222. Count Complete Tree Nodes

来源:互联网 发布:网络客服工资怎么算 编辑:程序博客网 时间:2024/06/05 08:42

/** * 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) {return count(root,-1,-1);    }        public int count(TreeNode root,int leftNum,int rightNum){if(root==null){return 0;}int leftFloor=leftNum,rightFloor=rightNum;if(leftFloor==-1){    leftFloor=1;    TreeNode h=root;while(h.left!=null){leftFloor++;h=h.left;}}if(rightFloor==-1){    rightFloor=1;    TreeNode h=root;        while(h.right!=null){        rightFloor++;        h=h.right;        }}if(leftFloor==rightFloor){        return (int)Math.pow(2, rightFloor)-1;        }else{        return count(root.left,leftFloor-1,-1)+count(root.right,-1,rightFloor-1)+1;        }}}

Given a complete binary tree, count the number of nodes.

Definition of a complete binary tree from Wikipedia:

In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as possible. It can have between 1 and 2h nodes inclusive at the last level h.

大意为给出一个完全二叉树,求出所有节点的个数


我的思路为二分法,先判断根节点最左到叶子节点和最右到叶子节点的距离,如果相等则说明是满二叉树,使用公式可以直接算出,如果不相等则递归进行根节点的左节点和右节点再加一,把根节点已经算出的深度-1传到下一个节点,节省时间

但这个算法并没有AC,只通过了16/18的样例







0 0
原创粉丝点击