二叉树排序

简介: 二叉树基本结构二叉树层次遍历递归中序遍历非递归中序遍历

使用java实现一棵二叉树,并使用他完成二叉树的层次遍历,两种中序遍历(递归和非递归)

二叉树基本结构

public class BinaryTree {
    BinaryTree left;
    BinaryTree right;
    Integer val;
    public BinaryTree getLeft() {
        return left;
    }
    public void setLeft(BinaryTree left) {
        this.left = left;
    }
    public BinaryTree getRight() {
        return right;
    }
    public void setRight(BinaryTree right) {
        this.right = right;
    }
    public Integer getVal() {
        return val;
    }
    public void setVal(Integer val) {
        this.val = val;
    }
}


二叉树层次遍历

首先将二叉树根节点放入到队列中,当队列不为空时,依次出队,并将出队的节点的左右孩子入队,再将该节点加入到结果集中

  /**
     * 二叉树层次遍历
     * @param root
     * @return
     */
    public List<BinaryTree> levelOrder(BinaryTree root){
        Queue<BinaryTree> queue = new LinkedList<>();
        List<BinaryTree> list = new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()){
            BinaryTree head = queue.poll();
            if(head.getLeft() != null){
                queue.offer(head.getLeft());
            }
            if(head.getRight() != null){
                queue.offer(head.getRight());
            }
            list.add(head);
        }
        return list;
    }


递归中序遍历

   /**
     * 二叉树递归中序遍历
     * @param root
     */
    public void midOrderRecur(BinaryTree root){
        if (root == null){
            return;
        }
        midOrderRecur(root.left);
        System.out.print(root.getVal());
        midOrderRecur(root.right);
    }


非递归中序遍历

  /**
     * 二叉树中序遍历
     * @param root
     */
    public void midOrder(BinaryTree root){
        BinaryTree current = root;
        LinkedList<BinaryTree> list = new LinkedList<>();
        while(current != null || !list.isEmpty()){
            while(current != null){
                list.addFirst(current);
                current = current.left;
            }
            if(!list.isEmpty()){
                current = list.removeFirst();
                System.out.print(current.getVal());
                current = current.right;
            }
        }
    }



相关文章
|
关系型数据库 MySQL Linux
Alibaba Cloud Linux release 3 (Soaring Falcon)操作系统
Alibaba Cloud Linux release 3 (Soaring Falcon)操作系统
|
iOS开发 MacOS 智能硬件
如何搭建远程控制家中设备的Home Assistant智能家居系统【内网穿透】(下)
如何搭建远程控制家中设备的Home Assistant智能家居系统【内网穿透】
867 0
|
9天前
|
存储 弹性计算 人工智能
最近买阿里云服务器打折吗?2026年阿里云服务器优惠折扣获取与使用指南
在阿里云服务器采购过程中,合理利用优惠折扣可显著降低成本,目前阿里云针对不同用户群体(新用户、老用户、学生)推出差异化优惠政策,涵盖折扣券、长周期折扣、折上折等多种形式。本文结合官方规则与实操经验,详解优惠类型、获取方式及使用技巧,帮助用户高效利用权益,避免因操作不当错失优惠。
|
存储 机器学习/深度学习 算法
【博士每天一篇文献-算法】连续学习算法之HNet:Continual learning with hypernetworks
本文提出了一种基于任务条件超网络(Hypernetworks)的持续学习模型,通过超网络生成目标网络权重并结合正则化技术减少灾难性遗忘,实现有效的任务顺序学习与长期记忆保持。
335 4
|
API 异构计算
4.3.2 图像分类ResNet实战:眼疾识别——模型构建
这篇文章介绍了如何使用飞桨框架中的ResNet50模型进行眼疾识别的实战,通过5个epoch的训练,在验证集上达到了约96%的准确率,并提供了模型构建、训练、评估和预测的详细代码实现。
|
安全 网络安全 数据安全/隐私保护
Pikachu Over Permission 通关解析
Pikachu Over Permission 通关解析
|
算法 调度 容器
RT-Thread快速入门-互斥量
RT-Thread快速入门-互斥量
347 0
RT-Thread快速入门-互斥量
|
存储 算法 API
Callout
Callout
406 0
|
前端开发 JavaScript Java
springboot酒店管理系统分前后端【源码+数据库】
springboot酒店管理系统分前后端【源码+数据库】
395 0
|
机器学习/深度学习 数据挖掘
神经气体网络(NGN)和不断增长的神经气体网络(GNGN)实现(Matlab代码实现)
神经气体网络(NGN)和不断增长的神经气体网络(GNGN)实现(Matlab代码实现)
434 0
神经气体网络(NGN)和不断增长的神经气体网络(GNGN)实现(Matlab代码实现)