首页 > 代码库 > 【LeetCode】222. Count Complete Tree Nodes-完全二叉树的结点个数
【LeetCode】222. Count Complete Tree Nodes-完全二叉树的结点个数
一、描述:
二、思路:
完全二叉树;
对于整棵二叉树,从根结点出发,一直沿左下方向遍历树的深度是l,一直沿右下方向遍历的深度是r;则有两种情况:
1、l == r,左右深度相等,一定是完全二叉树,即满二叉树,结点个数为(2^l-1)或(2^r-1);
2、l != r,只有一种情况:在二叉树的倒数第二层,某个父结点只有左叶子结点而无右叶子结点,及l=r+1。等价的说,将这一个多余的左叶子结点去掉的话,则每棵最小的二叉树(一共3个结点)都是满二叉树,即又回到了上述情况1,最后再加1即为总叶子结点;
因为二叉树本身就是递归定义的,故可采用递归实现。
三、代码:
/** * 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); int r = getRight(root); if(l==r) { return (2<<(l-1)) - 1; //2<<2相当于2*2^2=8 } else { return countNodes(root.left) + countNodes(root.right) + 1; } } private int getLeft(TreeNode root) { int count = 0; while(root!=null) { count+=1; root = root.left; } return count; } private int getRight(TreeNode root) { int count = 0; while(root!=null) { count+=1; root = root.right; } return count; } }
一点疑问:提交代码时只是改了下变量名,比如r/l/count等,改完之后再提交就会显示“Time Limit Exceeded”,我没搞懂到底是哪有问题?
【LeetCode】222. Count Complete Tree Nodes-完全二叉树的结点个数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。