C语言线索二叉树基础解读
//中序线索化
BTNode* pre = NULL;/*全局变量,始终指向刚刚访问过的节点*/
void InThreading(BTNode* p)
{
if (p == NULL) return;
InThreading(p->left);//递归左子树线索化
if (!p->left)//左孩子为空,left指针指向前驱
{
p->LTag = Thread;
p->left = pre;
}
if (pre!=NULL && !pre->right)//右孩子为空,right指针指向后继指针。
//这里判断 pre!=NULL 是因为线索化中序遍历的第一个节点(节点D)时,它并没有前驱节点,此时的pre仍然是NULL。
{
pre->RTag = Thread;
pre->right = p;
}
pre = p;//保持pre指向p的前驱
InThreading(p->right);
}