想问一下这个,假如当p遍历到左子树中的最后一个结点,然后结点后就是NULL,那再转入if中,p->rchild不还是NULL吗?那这个循环有什么意义呀
外层循环的意义是保证每个节点都会访问到,所以它的循环条件是栈不为空,p指针不为空;
内层while是为了在处理p节点之前,先将p的左下节点存入栈中
当p遍历到左子树中的最后一个结点,然后结点后就是NULL,那再转入if中,首先有一个出栈的操作,这个时候p不是NULL, 而是栈顶的元素,
这就是栈顶元素的左边都处理完了,然后处理了下栈顶元素,再转p->rchild。这就保证了中序遍历。
DuLNode* NextElem_Dul(DuLNode* p)
{
if (p == NULL)
{
return NULL;
}
else
{
return p->next;
}
}