对于后序遍历,需要明确,往往叶子结点,只能指向右子树(如果右子树存在的情况),或者指向该结点(因为这才是后序遍历),同样在进行退出到前一次递归的时候,我们要将pre指向当前的结点,这样才能够让退回上一个循环的指针,在满足条件的情况下,将结点指向它当前递归返回的它的下一个递归的pre直接结点前驱(我感觉这样能够好理解一点)
后序遍历的线索化二叉树
#pragma region 后序线索化
Node* pre;
void PostOrder(Node* root)
{if (root == NULL){return;}Node* tmpnode = NULL;tmpnode = root;PostOrder(tmpnode->lchild);PostOrder(tmpnode->rchild);if (tmpnode->lchild == NULL && tmpnode != NULL){tmpnode->ltag = 1;tmpnode->lchild = pre;}if (pre->rchild == NULL&& pre!=NULL){pre->rchild = tmpnode;pre->rtag = 1;}pre = root;cout << tmpnode->data << endl;
}
#pragma endregion