1.线索二叉树的定义和结构
问题的提出:
通过遍历二叉树可得到结点的一个线性序列,在线性序列中,很容易求得某个结点的直接前驱和后继。但是在二叉树上只能找到结点的左孩子、右孩子,结点的前驱和后继只有在遍历过程中才能得到,那么,如何保存遍历二叉树后动态得到的线性序列,以便快速找到某个结点的直接前驱和后继?
分析:
n个结点有n-1个前驱和n-1个后继;
一共有2n个链域,其中:n+1个空链域,n-1个指针域;
因此, 可以用空链域来存放结点的前驱和后继。 线索二叉树就是利用n+1个空链域来存放结点的前驱和后继结点的信息。
定义:
规定,若结点有左孩子,则其lchild指示其左孩子,否则,令lchild域指示其前驱;若结点有右孩子,则其rchild指示其右孩子,否则,令rchild域指示其后继。为了表示lchild和rchild域指向的是左、右孩子还是前驱、后继,可以加两个标志域,以明确lchild和rchild的指向。
结点结构:
若结点有左子树,则左链域lchild指示其左孩子(ltag=0);否则,令左链域指示其前驱(ltag=1);
若结点有右子树,则右链域rchild指示其右孩子(rtag