二叉树层序遍历+深度计算+节点计算、叶子节点计算

二叉树

前序、中序、后序遍历(递归+非递归)

层序遍历

public void levelTraversal(TreeNode root) {
    //存放节点值输出
    ArraryList<Integer> list = new ArrayList<Integer>();
    if(root==null)
        return;
    //队列先进先出
    Queue<TreeNode> queue = new LinkedList<TreeNode>();
    // 先放入根节点
    queue.add(root);
    while(!queue.isEmpty){
        //每拿出一个节点,判断是否有左右节点放入队列
        TreeNode node = queue.poll();
        //拿出的节点值存入
        list.add(node.data);
        if(node.left!=null)
            queue.add(node.left);
        if(node.right!=null)
            queue.add(node.right);
    }
    //输出
    for (int i=0;i<list.size();i++){
            System.out.print(list.get(i)+" ");
        }
}

深度

public int depth(TreeNode root){
    if (root==null){
        return  0;
    }
    else{
        int leftNum = depth(root.left);
        int rightNum = depth(root.right);
        return Math.max(leftNum,rightNum)+1;
    }
}

判断是否为叶子节点

public boolean isLeaves(TreeNode root){
    return  node.left==null&&node.right==null;
}

节点个数(递归)

计算节点个数可用各种遍历
public int numNode(TreeNode root){
    if(root==null){
        return 0;
    }
    //计入当前节点  
    int n = 1;
    //如果为叶子节点则返回n=1
    if(isLeaves(root)){
        return n;
    }
    //叠加递归计算的子节点数
    n+=numNode(root.left);
    n+=numNode(root.right);
    return n;
}

叶子节点个数

public numLeaves(TreeNode root){
    //如果不为空则进入叶节点计算
    return root!=null?num(root):0;
}
public int num(TreeNode node){
    int n=0;
    // 如果不是叶子节点继续递归否则+1
    if(node.left!=null){
        n+=isLeaves(node.left)?1:num(node.left);
    }
    if(node.right!=null){
        n+=isLeaves(node.right)?1:num(node.right);
    }
    return n;
}
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值