原理
根据遍历节点的顺序来建立关系,建立好后的线索树不需要通过从根开始依次递归来进行遍历,而只需要根据节点之间的关系来进行遍历。
建立
利用节点上的空指针进行赋值,左指针赋值它的上一个节点的地址,右指针赋值它的下一个节点的地址,增加一个节点成员flag来记录指针记录的是前驱后继或是子节点
例,DABC 中序遍历时,B为根节点
那么D记住A的地址为后继,A记住D的地址为前驱
A记住B的地址为后继,B记住A的地址为前驱
以前驱和后继在节点之间传递
递归点:左节点为空的节点,因为要利用节点的左空节点来储存上级的地址,然后判断上级的右节点是否为空,为空就储存它的下级也就是自己的地址,然后更新上级为自己,去遍历下一个左节点为空指针的节点
nd *pre = NULL;
void buildthread_in(nd *root){
if(!root)
return ;
buildthread_in(root->left);
if(!root->left){
root->left = pre;
root->ltag = THREAD;
}
if(pre && !pre->right){
pre->right = root;
pre->rtag = THREAD;
}