【算法集训】基础数据结构:九、完全二叉树

完全二叉树是二叉树的一种,它是除了叶子节点外其余各节点都为满二叉树,叶子节点只在倒数第一层或第二层出现。
即使是最后一层的叶子节点也是从左到右依次排列,中间不会空。
每一层都是按从左到右的顺序编号,所以一个节点i的叶子节点可以表示为2i2i + 1
完全二叉树和满二叉树的区别:

  1. 满二叉树一定是完全二叉树,反之则不然
  2. 满二叉树每个节点都有两个子节点(叶子节点除外),不会出现只有一个子节点的情况。

【算法集训】基础数据结构:九、完全二叉树_第1张图片

222. 完全二叉树的节点个数

/**
 * 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);
}

你可能感兴趣的:(【算法集训】基础数据结构,算法,数据结构)