代码随想录之完全二叉树

代码随想录之完全二叉树_第1张图片
完全二叉树的性质为:
1.h层的完全二叉树的节点个数为 2 h − 1 2^h-1 2h1
2.向左遍历和向右遍历的深度相同,就是左臂和右臂一样长

基于上述性质写出代码:

class Solution {
public:
    int traversal(TreeNode* cur){
        if(cur == nullptr) return 0;
        //如果子树是完全二叉树,走如下逻辑
        TreeNode* left = cur->left;
        TreeNode* right = cur->right;
        int l_dept = 0,r_dept = 0;
        while(left){
            left = left->left;
            l_dept++;
        }
        while(right){
            right = right->right;
            r_dept++;
        }
        if(l_dept == r_dept){
            return (2<<l_dept)-1;
        }
        //如果子树不是完全二叉树就走正常的逻辑
        int l_num = traversal(cur->left);
        int r_num = traversal(cur->right);
        return l_num+r_num+1;
    }
    int countNodes(TreeNode* root) {
        return traversal(root);
    }
};

你可能感兴趣的:(代码之二叉树,算法,c++,leetcode)