tk's blog
  • tk's blog Read Me
  • 算法相关
    • 数据结构
      • 【集训整理】 旋转treap模板
      • 二叉树及相关数据结构的java语言实现
      • 快乐树0x01:AVL树的java实现
      • 快乐树0x02 线段树实现(c++)
      • 链表的Java语言实现
    • 算法
      • DP的背包问题小结-java语言描述
      • 【集训整理】2-SAT问题 模板题
      • 【集训整理】Tarjan算法 模板题
      • 【集训整理】差分约束 模板题
      • 【集训整理】最近公共祖先LCA 模板题
      • 二分查找与二分答案-java实现
      • 动态规划-java语言练习一:暴力DP
      • 快速幂
      • 状态压缩DP-java描述
      • 差分
      • 乘法逆元
    • 题解
      • CFRound-GoodBye2022题解
  • java相关
    • Java与算法竞赛——注意事项摘录
    • java面向对象简要总结 一
    • java面向对象简要总结 三
    • java面向对象简要总结 二
  • 后端相关
    • Linux-Crontab命令
    • Spring Data JPA 使用方法
    • Spring集成Artemis实现JSM的异步消息传递
    • Spring使用自定义配置项
    • MIT6.824分布式系统Lab1.MapReduce笔记
    • MIT6.824分布式系统Lab2-Raft-A笔记
    • MIT6.824分布式系统Lab2-Raft-B笔记
  • 杂谈
    • 杂谈-关于2021
  • 杂项
    • c语言 scanf的返回值
    • 系统设计
  • 计科基础
    • 编译原理
      • 编译原理:词法分析笔记
    • CSAPP 第二章笔记
    • 计算机组成原理笔记
    • CSAPP Lab1. Datalab
    • CSAPP Lab2 Bomblab
  • C++每日一题
    • C++每日一题 Day 1 肥宅水
    • C++每日一题 Day 2 数字反转
    • C++每日一题 Day 3 理五的凡尔赛风气
    • C++每日一题 Day 4 我喜欢这个数
    • C++每日一题 Day 5 数字楼梯
    • C++每日一题 Day 6 插火把
    • C++每日一题 Day 7 贪吃蛇
    • C++每日一题 Day 8 蒙德最强战力
    • C++每日一题 Day 9 璃月七星选举
    • C每日一题 Day 2 肥宅水
    • C每日一题 Day 3 理五的凡尔赛风气
    • C语言每日一题 Day 1 荧妹好感队
由 GitBook 提供支持
在本页
  • 一、二叉树
  • 1. 节点
  • 2. 遍历
  1. 算法相关
  2. 数据结构

二叉树及相关数据结构的java语言实现


二叉树是一种很直观的非线性数据结构。本篇主要记录与二叉树相关的数据结构的java语言实现方法。

一、二叉树

1. 节点

既然有java,就简简单单用类来实现节点。

class TreeNode{
    int value;
    TreeNode leftNode;
    TreeNode rightNode;
    //构造函数
    TreeNode(int v){
        this.value = v;
    }
}

main函数手动建树:

    public static void main(String[] args){
        TreeNode node1 = new TreeNode(10);
        TreeNode node2 = new TreeNode(3);
        TreeNode node3 = new TreeNode(30);
        TreeNode node4 = new TreeNode(15);
        TreeNode node5 = new TreeNode(6);
        node1.leftNode = node2;
        node1.rightNode = node3;
        node3.leftNode = node4;
        node2.rightNode = node5;
        //结构:10 - 30 - 15
        //        - 3  - 6

这样就建好了一个无序的二叉树。

2. 遍历

一般遍历有深度优先和广度优先两种,深度包括先序、后序、中序遍历。这三者区别主要是先序遍历优先访问中间节点,中序是在中间访问中间节点(先访问左节点,后中节点,后右节点),后序遍历是先左右节点最后中间节点。

static void traversal(TreeNode node){
        //先序遍历
        if(node == null) return;
        System.out.println(node.value);
        traversal(node.leftNode);
        traversal(node.rightNode);
    }

广度优先遍历即层次遍历,和bfs类似,将首节点入队,每次循环从队伍中取出一个点,输出中间节点,把左右子节点入队,从上到下按层访问。

static void layerTraversal(TreeNode node){
        //层次遍历(bfs)
        if(node == null) return;
        LinkedList<TreeNode> list = new LinkedList<TreeNode>();
        list.add(node);
        while(!list.isEmpty()){
            TreeNode node_now = list.removeFirst();
            System.out.println(node_now.value);
            // 左右儿子通通入队
            if(node_now.leftNode != null)
            list.add(node_now.leftNode);
            if(node_now.rightNode != null)
            list.add(node_now.rightNode);
        }
    }
上一页【集训整理】 旋转treap模板下一页快乐树0x01:AVL树的java实现

最后更新于2年前