/** * 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) { if(root==null) return 0; //获取到左右两个深度 int leftDepth=getLeftDepth(root)+1; int rightDepth=getRightDepth(root)+1; if(leftDepth==rightDepth) { //这里采用位运算可以让实际那复杂度更加低,如果调用pow计算的话,会超时 return (2<<(leftDepth-1)) - 1; //return (int)Math.pow(2,leftDepth)-1; } else { return countNodes(root.left)+countNodes(root.right)+1; } } public int getLeftDepth(TreeNode root) { int res=0; TreeNode temp=root.left; while(temp!=null) { res++; temp=temp.left; } return res; } public int getRightDepth(TreeNode root) { int res=0; TreeNode temp=root.right; while(temp!=null) { res++; temp=temp.right; } return res; } }
时间: 2024-11-06 08:29:21