基本思想
要将一个二叉搜索树转为一个有序双向链表,且题目要求要在原二叉树结构上进行修改。我们可以将二叉树中的left作为链表中指向前一个元素的指针变量,right作为链表中指向下一个元素的指针变量。现在要求双向链表有序,我们可以对二叉线索是进行中序遍历,这样得到的序列有非递减的。并且,在中序遍历的过程中进行转链表的操作。现在的问题是,应该怎样转。我们直到中序遍历是“左根右”的顺序,当我们遍历完左子树时,到了root,然后再到右子树。想想,左子树中序遍历生成有序双向链表后,怎样和root链接起来。在这里,我们需要一个标记end,记录左子树中序遍历后的最后一个节点,自然而然,end的下一个节点是root,那么end->right=root,同时root->left=end;这样左子树生成的双向有序链表就与根节点root一起转为了有序双向链表。接着将end=root,作为左子树和根一起转成的有序双向链表的最后一个节点。最后,对右子树进行转化生成有序双向链表,接到end后面即可。
代码
Tre