一、定义二叉树节点类

 package tree;

 public class Node<E> {
public E data;
public Node<E> lnode;
public Node<E> rnode; public Node(){}
public Node(E data) {
this.data = data;
}
}

  通过泛型(generics)定义了一个公有的节点类,包含一个数据域 data,以及两个引用域 lnode 和 rnode。构造函数提供有参和无参默认两种。当然,因为二叉树节点这个类的适用范围是在关于二叉树的操作中,所以更加完美的做法是将其作为私有内部类定义。

二、定义二叉树主类

 public class BiTree <E> {

     /** root node of the binary tree    */
private Node<E> root;
/** the gross of total leaves */
private int leaveGross;
private int depth;
private String name; public BiTree(String name) {
this.name = name;
root = new Node<>();
} public Node<E> getRoot() { return root; } public int getLeaveGross() { return leaveGross; } public String getName() { return name; } public int getDepth() { return depth(root); } public int depth(Node<E> root){
if(root != null) {
return Math.max(depth(root.lnode), depth(root.rnode)) + 1;
} else
return 0;
}
}

  这里最主要的是根节点信息 root, 它是二叉树的构建、遍历、求深度、求叶子总数的根本。其他属性,可以有选择的定义。这里我递归写了一个求二叉树深度的方法。

三、构造二叉树

  在主类<code>BiTree</code>中定义建立二叉树的方法 -- generate()。

     /**
* Construct a Binary Tree with a given sequence of data as form of array.
* The <code>data</code> should be given as a complete binary tree.
* @param data
* @author SheepCore@MarshallLee
*/
public void generate(E[] data){
if(data.length == 0)
return;
int numData = data.length;
Node<E>[] nodes = new Node[numData]; for (int i = 0; i < numData; i++) {
nodes[i] = new Node(data[i]);
} for (int i = 0; i < numData / 2; i++) {
nodes[i].lnode = nodes[2 * i + 1];
nodes[i].rnode = nodes[2 * i + 2] ;
}
this.root = nodes[0];
depth = getDepth();
leaveGross = numData;
}

数据结构之二叉树篇卷一 -- 建立二叉树(With Java)的更多相关文章

  1. 【java 数据结构】还不会二叉树?一篇搞定二叉树

    二叉树是我们常见的数据结构之一,在学习二叉树之前我们需要知道什么是树,什么是二叉树,本篇主要讲述了二叉树,以及二叉树的遍历. 你能get到的知识点? 1.树的介绍 2.二叉树的介绍 3.二叉树遍历的四 ...

  2. 数据结构实习 - problem K 用前序中序建立二叉树并以层序遍历和后序遍历输出

    用前序中序建立二叉树并以层序遍历和后序遍历输出 writer:pprp 实现过程主要是通过递归,进行分解得到结果 代码如下: #include <iostream> #include &l ...

  3. 数据结构之二叉树篇卷四 -- 二叉树线索化(With Java)

    一.线索二叉树简介 二叉树本身是一种非线性结构,然而当你对二叉树进行遍历时,你会发现遍历结果是一个线性序列.这个序列中的节点存在前驱后继关系.因此,如何将这种前驱后继信息赋予给原本的二叉树呢?这就是二 ...

  4. 《数据结构与算法(C语言版)》严蔚敏 | 第五章 建立二叉树,并完成三/四种遍历算法

    PS:所有的代码示例使用的都是这个图 2019-10-29 利用p126的算法5.3建立二叉树,并完成三种遍历算法 中序 后序 先序 #include<iostream> #include ...

  5. JS数据结构第五篇 --- 二叉树和二叉查找树

    一.二叉树的基本概念 从逻辑结构角度来看,前面说的链表.栈.队列都是线性结构:而今天要了解的“二叉树”属于树形结构. 1.1 多叉树的基本概念,以上图中“多叉树”为例说明 节点:多叉树中的每一个点都叫 ...

  6. SDUT-3441_数据结构实验之二叉树二:遍历二叉树

    数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 已知二叉树的一个按先序遍历输入的字符 ...

  7. ※数据结构※→☆非线性结构(tree)☆============二叉树 顺序存储结构(tree binary sequence)(十九)

    二叉树 在计算机科学中,二叉树是每个结点最多有两个子树的有序树.通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用作二叉查找树和二叉堆或是 ...

  8. Android版数据结构与算法(六):树与二叉树

    版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 之前的篇章主要讲解了数据结构中的线性结构,所谓线性结构就是数据与数据之间是一对一的关系,接下来我们就要进入非线性结构的世界了,主要是树与图,好了接 ...

  9. SDUT OJ 数据结构实验之二叉树二:遍历二叉树

    数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...

随机推荐

  1. Java多线程之线程的启动

    Java多线程之线程的启动 一.前言 启动线程的方法有如下两种. 利用Thread 类的子类的实例启动线程 利用Runnable 接口的实现类的实例启动线程 最后再介绍下java.util.concu ...

  2. three.js实现球体地球城市模拟迁徙

    概况如下:1.SphereGeometry实现自转的地球:2.THREE.ImageUtils.loadTexture加载地图贴图材质:3.THREE.Math.degToRad,Math.sin,M ...

  3. [Python] Django框架入门3——深入视图

    说明: 本文主要深入了解视图(views.py),涉及路由配置.定义视图.Request对象.Response对象.状态保持等. 一.路由配置 1.配置位置(settings.py 的 ROOT_UR ...

  4. leetcode8 String to Integer

    题目描述 Implement atoi which converts a string to an integer. The function first discards as many white ...

  5. Delphi - Indy TIdThreadComponent 线程研究

    Indy IdThreadComponent 线程研究 前几天在开发数据实时解析功能模块的时候,发现解析数据量巨大,特别耗时,程序一跑起来界面假死. 为了优化用户体验,采用了Indy 自带的IdThr ...

  6. SpringMVC 三种异常处理方式

    SpringMVC 三种异常处理方式 在 SpringMVC, SpringBoot 处理 web 请求时, 若遇到错误或者异常,返回给用户一个良好的错误信息比 Whitelabel Error Pa ...

  7. P2698 [USACO12MAR]花盆Flowerpot 单调队列

    https://www.luogu.org/problemnew/show/P2698 警示 用数组写双端队列的话,记得le = 1, ri = 0:le<=ri表示队列非空 题意 求一个最小的 ...

  8. CF - 1117 F Crisp String

    题目传送门 题解: 枚举非法对. 如果 ‘a'  和 ’b' 不能相邻的话,那么删除 'a' 'b'之间的字符就是非法操作了. 假设题目给定的字符串为 "acdbe",所以删除cd ...

  9. CF 990D Graph And Its Complement 第十八 构造、思维

    Graph And Its Complement time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  10. JS数据结构第六篇 --- 二叉树力扣练习题

    1.第226题:翻转二叉树 递归+迭代两种实现方式: /** 反转二叉树 * Definition for a binary tree node. * function TreeNode(val) { ...