跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录
LeetCode:222.完全二叉树节点的数量
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层(从第 0 层开始),则该层包含 1~ 2h 个节点。
示例 1:
输入:root = [1,2,3,4,5,6]
输出:6
示例 2:
输入:root = []
输出:0
示例 3:
输入:root = [1]
输出:1
类似后序遍历,直接递归
public int countNodes(TreeNode root) {if (root == null)return 0;int leftCount = countNodes(root.left);int rightCount = countNodes(root.right);return 1 + leftCount + rightCount;}
利用完全二叉树的特性,通过公式来计算
public int countNodes(TreeNode root) {if (root == null)return 0;TreeNode leftNode = root.left;int leftDepth = 0;while (leftNode != null) {leftNode = leftNode.left;leftDepth++;}TreeNode rightNode = root.right;int rightDepth = 0;while (rightNode != null) {rightNode = rightNode.right;rightDepth++;}// 如果左右子树高度相同,即时一颗完全二叉树,可以使用公式来计算节点个数if (leftDepth == rightDepth)return (2 << leftDepth) - 1;int leftCount = countNodes(root.left);int rightCount = countNodes(root.right);return 1 + leftCount + rightCount;}