leetcode 222: Count Complete Tree Nodes
2015-06-06 05:14
746 查看
Count Complete Tree Nodes
Total Accepted: 93Total Submissions: 678
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.
[思路]
用暴力法, recursive求会超时 O(N). 如果从某节点一直向左的高度 = 一直向右的高度, 那么以该节点为root的子树一定是complete binary tree. 而 complete binary tree的节点数,可以用公式算出 2^h - 1. 如果高度不相等, 则递归调用 return countNode(left) + countNode(right) + 1. 复杂度为O(h^2)
[CODE]
/** * 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 l = getLeft(root) + 1; int r = getRight(root) + 1; if(l==r) { return (2<<(l-1)) - 1; } else { return countNodes(root.left) + countNodes(root.right) + 1; } } private int getLeft(TreeNode root) { int count = 0; while(root.left!=null) { root = root.left; ++count; } return count; } private int getRight(TreeNode root) { int count = 0; while(root.right!=null) { root = root.right; ++count; } return count; } }
相关文章推荐
- 翻译 - NodeJS错误处理最佳实践
- LeetCode题解(19)--Remove Nth Node From End of List
- Setup node.js on Windows Server
- 5.1.10 Populating Next Right Pointers in Each Node II
- node-glob学习
- 用NODEJS处理EXCEL文件导入导出,文件上传
- iOS 用GDataXMLNode创建和解析XML
- LeetCode_19---Remove Nth Node From End of List
- 【NodeJS】---express配置ejs mongoose route等
- nodejs安装及环境配置
- leetcode 19 -- Remove Nth Node From End of List
- nodePPT 这可能是迄今为止最好的网页版PPT
- NodeJs安装教程
- 用 node 实现仿微信风格的 token 获取接口
- Node.js 学习资源总结
- Use Node.js DDP Client on Arduino Yun to Access Meteor Server
- Reverse Nodes in k-Group
- nodejs(npm)——创建全局链接
- 一个强大的UI node 抽象
- nodejs——require单次加载