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);

  }