您的位置:首页 > Web前端 > Node.js

《leetCode》: Count Complete Tree Nodes

2016-07-07 11:35 357 查看

题目

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

notice:

(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.)

思路一:报超时错误

得到树的前序遍历,即得到了节点的个数。

实现代码如下:

public class Solution {
List<TreeNode> list = new ArrayList<TreeNode>();
public int countNodes(TreeNode root) {
preOrder(root);
return list.size();
}
private void preOrder(TreeNode root) {
if(root==null){
return ;
}
list.add(root);
preOrder(root.left);
preOrder(root.right);
}
}


由于这种思路完全没有利用完成二叉树的特点,报超时是正常的,下面我们需要寻找更好的思路来完成。

思路二

思路来自于:https://discuss.leetcode.com/topic/21317/accepted-easy-understand-java-solution

确实经典,自己想不到!!!

public class CountNodes_v2 {

public int countNodes(TreeNode root) {
if(root == null){
return 0;
}
int leftDepth = leftDepth(root);
int rightDepth = rightDepth(root);
if(leftDepth == rightDepth){
return (1<<leftDepth)-1;
}
else{//如果不相等,则递归到左右子树的节点数+1.
return 1 + countNodes(root.left) + countNodes(root.right);
}
}

public int leftDepth(TreeNode root){
int depth = 0;
while(root!=null){
depth ++;
root = root.left;
}
return depth;
}
public int rightDepth(TreeNode root){
int depth = 0;
while(root!=null){
depth ++;
root = root.right;
}
return depth;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: