day13|559.n叉树的最大深度、222.完全二叉树的节点个数

559.n叉树的最大深度

        给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。

示例 1:

 

输入:root = [1,null,3,2,4,null,5,6]

输出:

 

示例 2:

 

输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]

输出:5

问题分析:

 同111题,利用递归,根节点的高度就是整个二叉树的深度。

class Solution {
    public int maxDepth(Node root) {
        if (root==null) return 0;
        int dep=0;
        if (root.children!=null){
            for(Node child:root.children){
                dep=Math.max(dep,maxDepth(child));
            }
        }
        return  dep+1;
    }
}

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

        给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含1~2^{h}个节点。

示例 1:

 

输入:root = [1,2,3,4,5,6]

输出:

示例 2:

输入:root = []

输出:0

示例 3:

输入:root = [1]

输出:1

问题分析:

递归法:

①遍历左右子树的外侧节点(内侧节点不用遍历,因为是满二叉树,内侧一定有节点), 如果左右两侧的外侧节点数量相等,就是满二叉树,直接利用公式2^h-1,求出满二叉树的节点数量, 在返回给上一层节点,再+1。(一个节点也是满二叉树)

②精简版,按照普通二叉树来看。

方法一:利用满二叉树法

class Solution {
    public int countNodes(TreeNode root) {
        if (root==null) return 0;
        TreeNode left=root.left;
        TreeNode right=root.right;
        int leftdep=0,rightdep=0;//其实起始值应为1,但是按位操作,原因见下
        while(left!=null){
            left=left.left;
            leftdep++;
        }
        while (right!=null){
            right=right.right;
            rightdep++;
        }
        if (leftdep ==rightdep){
            return (2<<leftdep)-1;
            //<<:左移: 2 <<= dep 相当于2 * 2^dep,此时多乘了个2,所以一开始初始化为0
        }
        return countNodes(root.left)+countNodes(root.right)+1;//注意递归
    }
}

方法二:精简版

class Solution {
    public int countNodes(TreeNode root) {
        if (root==null) return 0;

        return countNodes(root.left)+countNodes(root.right)+1;

    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值