线索化二叉树的概念以及前序线索化

最后都变了- 提交于 2020-02-29 01:45:37

**

二叉树和线索化二叉树

**以此谨记自己学习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);
        }

    }
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!