leetcode--CountCompleteTreeNodes
来源:互联网 发布:2017年火灾数据 编辑:程序博客网 时间:2024/06/09 22:04
complete binary tree:最后一层以上的节点全部排满,最后一层叶子节点都在左边。(可能满也可能不满)
如果用前序中序或者后序递归的话,内存过大,时间也不够。因此根据complete binary tree的性质,分别求最左子节点和最右子节点的深度,如果相等就根据公式返回,不等再向下递归。这样可以减少递归的次数。
/** * Created by marsares on 15/6/16. */public class CountCompleteTreeNodes { public int countNodes(TreeNode root) { if(countLeft(root,0)==countRight(root,0))return twoPower(countLeft(root,0))-1; else return countNodes(root.left)+countNodes(root.right)+1; } private int countLeft(TreeNode root,int height){ if(root==null)return height; return countLeft(root.left,height+1); } private int countRight(TreeNode root,int height){ if(root==null)return height; return countRight(root.right, height + 1); } private int twoPower(int n){ int ans=1; for(int i=0;i<n;i++){ ans=ans*2; } return ans; } public static void main(String[]args){ CountCompleteTreeNodes cctn=new CountCompleteTreeNodes(); BinaryTreeSerialize bts=new BinaryTreeSerialize(); TreeNode root=bts.Unserialize("{5,3,8,2,4,7}"); System.out.println(cctn.countNodes(root)); }}
0 0
- leetcode--CountCompleteTreeNodes
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- Java如何对HashMap按值进行排序
- C 语言变长数组 struct 中 char data[0] 的用法
- QT stylesheet 操作
- Django开发问题总结
- EMC测试开发实习生面试记录
- leetcode--CountCompleteTreeNodes
- lvs(+keepalived)、haproxy(+heartbeat)、nginx 负载均衡的比较分析
- LeetCode 111 Minimum Depth of Binary Tree
- 事务
- 黑马程序员学习日记--网络编程
- leetcode--Best Time to Buy and Sell Stock II
- 《C专家编程》笔记一:第二章 这不是Bug,而是语言特性
- 成绩查询系统--框架篇--jar包分析
- 重新理解计算机(一)