**
二叉树和线索化二叉树
**以此谨记自己学习java心得
什么是二叉树,用我自己的话说。一般简单数据结构是数组和链表,昨天学了哈希表,是一个数组加上一个单向链表完成的。但是哈希表在查找某单元时,需要从头找到尾。而二叉树可以根据大小来分配,像链表里的结构一般是有previous 和next。而二叉树则是left和right。又因为考虑到完全二叉树的最后一排以及倒数第二排的一些元素,它们的指针是空的,也就是浪费了left和right内存空间,线索二叉树则将这些没有指向具体的内存的left和right给用了起来。
如图中8,10,14的left和right没有充分利用,6的right没有充分利用,在线索化二叉树中,根据前序、中序、后序可将这些left,right分别指向排列时元素的前驱和后继。
比方说,若按前序排序(可理解为 先中再左再有右):1,3,8,10,6,14。在该排序中则将8的left 指向3,8的right指向10。6的right指向14.依次类推。中序和后序的话,也是按照排序的先后,将left指向前驱,将right指向后继。
注:若某结点原本就有指向其他地址的left或者right,则这些有指向left或right原封不动。
在这里张贴一下自己的前序排序线索化的代码。
public void prologue(HeroNode node) {
if (node == null) {
return;
}
if (node.left == null) {
node.left = precursor1;
node.setSetleft(1);
}
if (precursor1 != null && precursor1.right == null) {
precursor1.right = node;
precursor1.setSetright(1);
}
precursor1 = node;
if (node.getSetleft() != 1) {
prologue(node.left);
}
if (node.getSetright() != 1) {
prologue(node.right);
}
}
}
来源:CSDN
作者:卫诗
链接:https://blog.csdn.net/q763562998/article/details/104564022