java-求二叉树节点个数 / 叶子节点个数 / 第k层节点个数

本文介绍了三种不同的二叉树节点计数算法:计算总节点数、叶子节点数及特定层级节点数。通过递归方式,文章详细阐述了每种算法的实现原理,为理解二叉树结构提供深入解析。

在这里插入图片描述




    public static int size(Node root) {
        //求二叉树中节点的个数
        //使用先序遍历的方式
        if (root == null) {
            return 0;

        }
        //体会递归"拆分问题的过程
        //整个树节点个数=根节点的个数(1)+左子树的个数+右子树的个数
        return 1+size(root.left)+size(root.right);


    }

    public  static  int leafSize(Node root){

        //求二叉树叶子节点的个数
        //还是要遍历树,并且拆分问题
        if (root==null){
            return 0;
        }
            if (root.left==null&&root.right==null){
                //此时的root没有子树,root自己就是叶子节点.
                return 1;
            }
            return leafSize(root.left)+leafSize(root.right);


    }

    public static int  kLevelSize(Node root,int k){
        //求二叉树第K层的节点个数
        //如果k<1 那么只能是空树,直接返回0;
        //如果k==1 求根节点的个数.直接返回1
        //k层节点的个数=根节点左子树的k-1层节点个数+根节点右子树的k-1层节点个数

        if (k<1){
            return 0;
        }
        if (k==1){
            return 1;
        }
        return kLevelSize(root.left,k-1)+kLevelSize(root.right,k-1);


    }




评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值