完全二叉树是二叉树的一种,它是除了叶子节点外其余各节点都为满二叉树,叶子节点只在倒数第一层或第二层出现。
即使是最后一层的叶子节点也是从左到右依次排列,中间不会空。
每一层都是按从左到右的顺序编号,所以一个节点i
的叶子节点可以表示为2i
和2i + 1
。
完全二叉树和满二叉树的区别:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int countNodes(struct TreeNode* root) {
if(root == NULL) {
return NULL;
}
return 1 + countNodes(root->left) + countNodes(root->right);
}