Concept
- 树和图作为一种Java主要的非线性数据结构,树的变种有很多
- 完全二叉树:对于一颗二叉树,假设其深度为d(d>1)。除了第d层外,其它各层的节点数目均已达最大值,且第d层所有节点从左向右连续地紧密排列,这样的二叉树被称为完全二叉树
- 满二叉树:所有叶节点都在最底层的完全二叉树
- 平衡二叉树(AVL树):当且仅当任何节点的两棵子树的高度差不大于1的二叉树
- 二叉搜索树(Binary Search Tree):也称排序二叉树、有序二叉树
- 霍夫曼树:带权路径最短的二叉树称为哈夫曼树或最优二叉树
- B树:一种对读写操作进行优化的自平衡的二叉查找树,能够保持数据有序,拥有多于两个子树。
- 线索二叉树:线索链表主要是为了找到该结点在某种遍历序列中的前驱和后继结点
Code
- 线索二叉树:本质上是将树的非线性结构转换为线性结构。存储结构如下:
分为前、中、后序线索化
这里以中序线索化为示例 将二叉搜索树的非线性结构转化为线性结构
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<Integer> threaded(TreeNode root) {
List<Integer> cur = new ArrayList();
inorder(root,cur);
return cur;
}
private void inorder(TreeNode root, List<Integer> cur){
if(root == null){
return;
}
inorder(root.left,cur);
cur.add(root.val);
inorder(root.right,cur);
}
}
这种方法用来将对二叉搜索树遍历转换为对线性表的遍历来解决问题