LeetCode[222]完全二叉树的节点个数
思路:
这个节点个数可以使用递归左儿子个数+递归右儿子个数+1,这个1是根节点,最后结果为节点个数,但我们没有练习到完全二叉树的性质.
完全二叉树的性质是:我简单说一下,大概就是其他节点都满了,就是只缺右面的叶子节点,右面叶子节点缺多少都行,只要不是左面少节点就行。
知道了这个性质,就直到完全二叉树是由满二叉树组成的,那么我们直接求满二叉树的节点就行,满二叉树的节点数量为depth*2-1
代码:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public int countNodes(TreeNode root) {if(root == null) return 0;TreeNode left = root.left;TreeNode right = root.right;int leftDepth = 0, rightDepth = 0;while(left != null){left = left.left;leftDepth++;}while(right != null){right = right.right;rightDepth++;}if(leftDepth == rightDepth){return (2<<leftDepth)-1;}return countNodes(root.left) + countNodes(root.right) + 1;//这个+1是添加最后的根节点}
}