二叉树 - 所有节点的度都不大于2的树。
存储结构 - 顺序和链式
对于顺序存储结构, 当二叉树为完全二叉树的时候才能够不浪费存储空间, 否则对空间的浪费是很大滴。
而对于链式存储结构, 分三域节点和四域节点
三域 - Data + lChild + rChild
四域 - Data + lChild + parent + rChild
----------------------------- 我是分割线 ----------------------------
二叉树的基本操作:
先序, 中序 和 后序遍历
先定义node
public class Node {
private String value;
private Node parent;
private Node leftChild;
private Node rightChild;
public Node(String value, Node parent, Node leftChild, Node rightChild) {
this.value = value;
this.parent = parent;
this.leftChild = leftChild;
this.rightChild = rightChild;
}
public String getValue() {
return value;
}
public Node getParent() {
return this.parent;
}
public Node getLeftChild() {
return this.leftChild;
}
public Node getRightChild() {
return this.rightChild;
}
}
再来看遍历
public class Tree {
// a
// / \
// b c
// / \ \
// d e g
public static void main(String[] args) {
Node d = new Node("d", null, null, null);
Node e = new Node("e", null, null, null);
Node g = new Node("g", null, null, null);
Node b = new Node("b", null, d, e);
Node c = new Node("c", null, null, g);
Node a = new Node("a", null, b, c);
printDataLR(a);
System.out.println();
printLeftDR(a);
System.out.println();
printLRightD(a);
}
// 先序遍历 a-b-d-e-c-g
private static void printDataLR(Node root) {
if (root == null)
return;
System.out.print(root.getValue());
printDataLR(root.getLeftChild());
printDataLR(root.getRightChild());
}
// 中序遍历 d-e-b-g-c-a
private static void printLeftDR(Node root){
if (root == null)
return;
printLeftDR(root.getLeftChild());
System.out.print(root.getValue());
printLeftDR(root.getRightChild());
}
// 后序遍历 d-e-b-g-c-a
private static void printLRightD(Node root){
if (root == null)
return;
printLRightD(root.getLeftChild());
printLRightD(root.getRightChild());
System.out.print(root.getValue());
}
}
----------------------------- 我是分割线 ----------------------------
Huffman树
先看个例子:
// X
// 0/ \1
// X X
// 0/ \1 0/ \1
// a b c d
// a = 00; b = 01; c = 10; d = 11.
所以假如给定一个字串: aabdca, 则其对应的二进制编码为: 000001111000
而对其解码就是从根结点出发, 扫描二进制编码, 0往左, 1往右, 碰到叶子节点直接输出, 然后重新回到跟结点。所输出来的就是原始字串了。
再来看看Huffman树的定义:
由n个带权叶子结点构成的所有二叉树中带权路径长度最小的二叉树, 又叫最优二叉树。
什么生权? 权就是赋予结点某种特殊意义的正数。
带权路径则是: Sum(结点的权 × 结点到根的路径长度)
一个Huffman树的构造过程如下:
// 权值 {5, 9, 11, 32, 10, 21, 6}
// 第一步
11 9 11 32 10 21
/ \
5 6
// 第二步
11 19 11 32 21
/ \ / \
5 6 9 10
// 第三步
22 19 32 21
/ \ / \
11 11 9 10
/ \
5 6
// 第四步
22 40 32
/ \ / \
11 11 19 21
/ \ / \
5 6 9 10
// 第五步
54 40
/ \ / \
22 32 19 21
/ \ / \
11 11 9 10
/ \
5 6
// 第六步
94
/ \
54 40
/ \ / \
22 (32) (19)(21)
/ \ / \
11 (11) (9) (10)
/ \
(5) (6)
分享到:
相关推荐
1.二叉树的基本操作实现【问题描述】建立一棵二叉树,用递归方法实现二叉树的如下基本操作:(1)按先序序列构造一棵二叉链表表示的二叉树T;(2)对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出...
在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。 二叉树的每个结点至多只有二棵子树...
在IT领域,特别是数据结构和算法的学习中,二叉树是一种重要的抽象数据类型。满二叉树是一种特殊的二叉树,其中每一层都是完全填充的,除了可能的最后一层,且最后一层的所有节点都尽可能地向左靠拢。而将满二叉树...
平衡二叉树Java实现,平衡二叉树Java实现,平衡二叉树Java实现,平衡二叉树Java实现,
通过前序序列创建线索二叉树 1:中序遍历 2:查找节点前驱后继 3:插入节点 4:删除节点 0:退出
二叉树是一种重要的数据结构,它由节点组成,每个节点有两个子节点,分别称为左子节点和右子节点。在计算机科学中,二叉树被广泛应用于搜索、排序、表达式解析等多种场景。本主题主要关注的是二叉树的建立以及它的...
在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。 二叉树的每个结点至多只有二棵子树...
二叉树是一种在计算机科学中广泛应用的数据结构,它由节点(也称为结点)组成,每个节点最多有两个子节点,通常称为左子节点和右子节点。二叉树的深度是指从根节点到最远叶节点的最长路径上边的数目,即树的最大层数...
根据给定的信息,“有值二叉树”这一概念在IT领域通常是指一种特殊的二叉树结构,其中每个节点都包含具体的数值或者数据信息。在计算机科学中,二叉树是一种非常重要的数据结构,广泛应用于算法设计、数据组织与管理...
在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。 一棵深度为k,且有2^k-1个结点的...
二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py...
java实现创建二叉树,并且遍历二叉树(此处使用递归方式遍历); 创建二叉树的方式有很多,此处使用线性的链表转化成二叉树,链表节点的顺序就是前序遍历的顺序,链表中的null值,代表二叉树左节点或者右节点为null...
在计算机科学中,二叉树是一种特殊的图结构,其中每个节点最多有两个子节点,通常分为左子节点和右子节点。而广义表(Generalized List)是抽象数据类型的一种,它可以表示各种复杂的结构,包括链表、树等。本话题...
二叉树的遍历,先序遍历,中序遍历,后续遍历。.
文章目录二叉树的直径题目解题思路代码实现实现结果 二叉树的直径 题目来源:https://leetcode-cn.com/problems/diameter-of-binary-tree/ 题目 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是...
1、根据输入的数据建立一个二叉树; 2、分别采用前序、中序、后序的遍历方式显示输出二叉树的遍历结果 3、采用非递归的编程方法,分别统计二叉树的节点个数、度为1、度为2和叶子节点的个数,以及数据值的最大值和...