给定一棵完全二叉树的头节点head,返回这棵树的节点个数。如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)的解法。
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }*/ public class Solution { public int nodeNum(TreeNode head) { if (head == null) { return 0; } return solve(head, 1, mostLeftLevel(head, 1)); } private int solve(TreeNode head, int i, int h) { if (i == h) { return 1; } if (mostLeftLevel(head.right, i+1) == h) { return solve(head.right, i+1, h) + (1 << (h-i)); } else { return solve(head.left, i+1, h) + (1 << (h-i-1)); } } private int mostLeftLevel(TreeNode head, int i) { while (head != null) { i++; head = head.left; } return i-1; } }