数据结构之二叉树篇卷一 -- 建立二叉树(With Java)
一、定义二叉树节点类
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)的更多相关文章
- 【java 数据结构】还不会二叉树?一篇搞定二叉树
二叉树是我们常见的数据结构之一,在学习二叉树之前我们需要知道什么是树,什么是二叉树,本篇主要讲述了二叉树,以及二叉树的遍历. 你能get到的知识点? 1.树的介绍 2.二叉树的介绍 3.二叉树遍历的四 ...
- 数据结构实习 - problem K 用前序中序建立二叉树并以层序遍历和后序遍历输出
用前序中序建立二叉树并以层序遍历和后序遍历输出 writer:pprp 实现过程主要是通过递归,进行分解得到结果 代码如下: #include <iostream> #include &l ...
- 数据结构之二叉树篇卷四 -- 二叉树线索化(With Java)
一.线索二叉树简介 二叉树本身是一种非线性结构,然而当你对二叉树进行遍历时,你会发现遍历结果是一个线性序列.这个序列中的节点存在前驱后继关系.因此,如何将这种前驱后继信息赋予给原本的二叉树呢?这就是二 ...
- 《数据结构与算法(C语言版)》严蔚敏 | 第五章 建立二叉树,并完成三/四种遍历算法
PS:所有的代码示例使用的都是这个图 2019-10-29 利用p126的算法5.3建立二叉树,并完成三种遍历算法 中序 后序 先序 #include<iostream> #include ...
- JS数据结构第五篇 --- 二叉树和二叉查找树
一.二叉树的基本概念 从逻辑结构角度来看,前面说的链表.栈.队列都是线性结构:而今天要了解的“二叉树”属于树形结构. 1.1 多叉树的基本概念,以上图中“多叉树”为例说明 节点:多叉树中的每一个点都叫 ...
- SDUT-3441_数据结构实验之二叉树二:遍历二叉树
数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 已知二叉树的一个按先序遍历输入的字符 ...
- ※数据结构※→☆非线性结构(tree)☆============二叉树 顺序存储结构(tree binary sequence)(十九)
二叉树 在计算机科学中,二叉树是每个结点最多有两个子树的有序树.通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用作二叉查找树和二叉堆或是 ...
- Android版数据结构与算法(六):树与二叉树
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 之前的篇章主要讲解了数据结构中的线性结构,所谓线性结构就是数据与数据之间是一对一的关系,接下来我们就要进入非线性结构的世界了,主要是树与图,好了接 ...
- SDUT OJ 数据结构实验之二叉树二:遍历二叉树
数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...
随机推荐
- 地图POI类别标签体系建设实践
导读 POI是“Point of interest”的缩写,中文可以翻译为“兴趣点”.在地图上,一个POI可以是一栋房子.一个商铺.一个公交站.一个湖泊.一条道路等.在地图搜索场景,POI是检索对象, ...
- Web前端和Web后端的区分
版权声明:本文为CSDN博主「十豆三展」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/zz1399590022 ...
- 9406LaTeX公式
需要注意的是: 1.本文只对第四章排版数学公式进行简单整理 2.本文大量内容直接引自官网,尤其是涉及4.开头的标题,为方便读者查阅对比,就不一一删改和引注,你可以点此访问官网对应内容,也可以点此下载我 ...
- JAVA 异常汇总
1 java.lang.ArithmeticException: / by zero 原因:当我们定义的被除数为整型时(short.int.long)会抛出此异常, 被除数为整型时不可为零.解决办法 ...
- 跨库数据迁移利器 —— Sqoop
一.Sqoop 基本命令 1. 查看所有命令 # sqoop help 2. 查看某条命令的具体使用方法 # sqoop help 命令名 二.Sqoop 与 MySQL 1. 查询MySQL所有数据 ...
- Leetcode之二分法专题-441. 排列硬币(Arranging Coins)
Leetcode之二分法专题-441. 排列硬币(Arranging Coins) 你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币. 给定一个数字 n,找出可形 ...
- Elasticsearch核心技术(2)--- 基本概念(Index、Type、Document、集群、节点、分片及副本、倒排索引)
Elasticsearch核心技术(2)--- 基本概念 这篇博客讲到基本概念包括: Index.Type.Document.集群,节点,分片及副本,倒排索引. 一.Index.Type.Docume ...
- HashMap原理。图文并茂式解读。这些注意点你一定还不了解
目录 概述 属性详解 table entrySet size modCount threshold.loadFactor 源码知识点必备 getGenericInterfaces和getInterfa ...
- TypeScript进阶开发——ThreeJs基础实例,从入坑到入门
前言 我们前面使用的是自己编写的ts,以及自己手动引入的jquery,由于第三方库采用的是直接引入js,没有d.ts声明文件,开发起来很累,所以一般情况下我们使用npm引入第三方的库,本文记录使用np ...
- div拖拽
分析逻辑关于该过程有一下3个动作 1.点击 2.移动 3.释放鼠标 1.点击时获得点击下去的一点的坐标(盒子的top,left),去除默认事件. 2.移动时不断改变盒子的坐标.(移动的dom目标应该为 ...