二叉树最大深度,二叉树最小深度,完全二叉树节点个数

1.二叉树最大深度

深度 是 节点 到 节点头的距离        从头 到 底 计数

高度 是 节点 到 叶子节点 的距离     从 底 到 顶 计数

class Solution {
public:
int a ( int x , int y ) {
     return x >=y ? x : y;
}
int getheight ( TreeNode * cur ) {
    if ( cur == nullptr ) return 0;
    int rightnum = getheight( cur -> right );
    int legtnum = getheight( cur -> left );
    int num = a( rightnum ,legtnum ) + 1;
    return num;
}
    int maxDepth(TreeNode* root) {
        int num = getheight( root );
        return num;

    }
};

a 函数 相当于 max 函数 ,想试试三目运算 就自己写l

2.二叉树最小深度 leetcode

class Solution {
public:
int getminheight ( TreeNode * cur ) {
    if ( cur == NULL ) return 0;
    int leftnum = getminheight ( cur -> left );
    int rightnum = getminheight( cur -> right );
    if ( cur -> left == NULL && cur -> right != NULL ) return 1 + rightnum;
    if ( cur -> left != NULL && cur -> right == NULL ) return  1 + leftnum;
    int num = min( leftnum,rightnum) + 1;
    return num;
}
    int minDepth(TreeNode* root) {
        return getminheight(root);

    }
};

与最大深度 不同

max  变为 min 

注意左子树为空,右子树 不为空的情况


3.完全二叉树节点个数 leetcode

满二叉树 是 所有 节点 都是左右孩子,除了叶子节点

完全二叉树 是  除了叶子节点 不全是 满的 其他都是满二叉树 ,  且 叶子节点 排列 是连续 的不能 有 空

可以直接遍历 记录个数

这里使用完全二叉树的性质  满二叉树 的节点个数    2的k次方 - 1

 

class Solution {
public:
    int countNodes(TreeNode* root) { 
       if ( root == NULL ) return 0;
       TreeNode* left = root -> left;
       TreeNode* right = root -> right;
       int leftnum,rightnum = 0;
       while ( left ) {
           left = left -> left;
           leftnum++;
       }
        while ( right ) {
            right = right -> right ;
            rightnum++;
        }
        if ( rightnum == leftnum ) return (2<<rightnum) - 1;
        int lenum = countNodes(root -> left);
        int rinum = countNodes( root -> right );
        int num = lenum + rinum + 1;
        return num;
    } 
};

2 << rightnum  相当于 2 的 rightnum 次方

当一个 节点 的 右边 孩子的数量 和 左边孩子数量 相同时 , 表示 当前节点的 下面 是 满二叉树 可以用公式  算出 节点个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值