标签:算法 哈夫曼编码 二叉搜索树 binary root 平衡 编码 out 节点
public class BinaryTreeNode<E> {
E val;
BinaryTreeNode<E> left = null;
BinaryTreeNode<E> right = null;
BinaryTreeNode<E>(E val){
this.val = val;
}
}
递归方式:
前序遍历
public void preBinaryTreeOrder(TreeNode root) {
if (null != root) {
System.out.println(root.val);
preBinaryTreeOrder(root.left);
preBinaryTreeOrder(root.right);
}
}
中序遍历
public void inBinaryTreeOrder(TreeNode root) {
if (null != root) {
inBinaryTreeOrder(root.left);
System.out.println(root.val);
inBinaryTreeOrder(root.right);
}
}
后序遍历
public void postBinaryTreeOrder(TreeNode root) {
if (null != root) {
postBinaryTreeOrder(root.left);
postBinaryTreeOrder(root.right);
System.out.println(root.val);
}
}
满二叉树
除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树。
/*
* A
* / * / * B C
* / \ / * / \ / * D E F G
*
*/
完全二叉树
一棵二叉树至多只有最下面的一层上的结点的度数可以小于2,并且最下层上的结点都集中在该层最左边的若干位置上,则此二叉树成为完全二叉树。
/*
* A
* / \
* / \
* B C
* / \
* / \
* D E
*
*/
平衡二叉树(AVL)
是一棵空树或左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
/*
* A
* / \
* / \
* B C
* / \ \
* / \ \
* D E F
* /
* /
* H
*
*/
二叉搜索/排序树
是一棵空树或者是具有下列性质的二叉树:
它的左、右子树也分别为二叉排序树
/*
* 6
* / \
* / \
* 3 8
* / / \
* / / \
* 1 7 9
*
*/
PS:中序遍历,结果是有序数组。
红黑树
平衡二叉搜索树
/*
* 6
* / \
* / \
* / \
* 2 8
* / \ / \
* / \ / \
* 1 4 7 9
* / * / \
* 3 5
*/
特性:
哈夫曼树(Huffman树,最优二叉树)
给定n个权值作为n个叶子结点,构造成带权路径长度达到最小的二叉树。
例,[1,3,5,7,9]构造的哈夫曼树可能如下(不唯一):
/*
* O
* / \
* / \
* / \
* O O
* / \ / \
* / \ / \
* 5 O 7 9
* / * / \
* 1 3
*/
哈夫曼编码:假设结点到左子结点的路径标记为0,到右子结点的路径标记为1,则根节点到叶子结点的路径标记顺序为该叶子结点的哈夫曼编码。
标签:算法 哈夫曼编码 二叉搜索树 binary root 平衡 编码 out 节点
原文地址:https://www.cnblogs.com/wscy/p/9372095.html