【树】222. 完全二叉树的节点个数
题目:
给出一个完全二叉树,求出该树的节点个数。
说明:
完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
示例:
输入:
1
/ \
2 3
/ \ /
4 5 6
输出: 6
解答:
方法一:常规方法,遍历所有节点
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { int res = 0; public int countNodes(TreeNode root) { preOrder(root); return res; } public void preOrder(TreeNode root){ if(root == null) return; res++; preOrder(root.left); preOrder(root.right); } }
方法二:
题目限定了二叉树为完全二叉树,所以应该利用上完全二叉树的性质来完成本题。


/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public int countNodes(TreeNode root) { if(root == null) return 0; int left = countLevel(root.left); int right = countLevel(root.right); if(left == right){ //注意 '<<' 的优先级低于 '+' 记得加() return countNodes(root.right) + (1<<left); } else{ return countNodes(root.left) + (1<<right); } } public int countLevel(TreeNode root){ int level = 0; while(root!=null){ level++; root = root.left; } return level; } }

浙公网安备 33010602011771号