计算一个二叉树的所有node节点数
刚开始直接递归遍历,后来直接超时了,因为是二叉树,可以二分的查找高度,根据高度来计算出二叉树的节点数目
/**
* 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) {
int total = 0;
while(root != null){
int leftLeft = level(root.left, true);
int leftRight = level(root.left, false);
int rightLeft = level(root.right, true);
int rightRight = level(root.right, false);
total += 1;
if(leftLeft == leftRight){
total += Math.pow(2, leftRight) - 1;
root = root.right;
}
else{
total += (int)(Math.pow(2, rightRight)) - 1;
root = root.left;
}
}
return total;
}
//true is left false is right
public static int level(TreeNode root, boolean left){
int level = 0;
while(root != null){
if(left) root = root.left;
else root = root.right;
level++;
}
return level;
}
}