二叉搜索树:左边子树小于节点,右子树大于节点。
双向链表:排升序,并且需要前后节点互相有连接,即前面节点的右节点连接到后面节点,而后面节点的左节点连接到前面节点。
由题可以知:
我们需要进行中序遍历,也就是左中右。并且需要使用双指针法,我们需要将前一个节点保存下来,这样才能将前一个节点的右节点连接到当前节点。
首先进行设置遍历的函数,
先传入根节点和设置的前一个节点,此时前一个节点为空。
我们进行中序遍厉,不断遍历之后,cur回来到左子树的最左边的那个节点即最小的那个节点。
此时这是最后一层递归完,可以开始执行下面的语句了。
我们需要将cur的left指向prev,然后prev的right指向cur,但此时prev为空则它的right不能指向cur,并且链表第一个也不能为空,然后我们就跳过将prev的右指向cur这一步,直接将cur赋给prev。
这是递归完之后,返回到递归的上一层。这是就可以将prev的右指向cur,cur的左指向prev。完成之后,prev就会被赋值成cur。
因为是中序遍历,左中遍历后,还需要对右节点进行遍历。就需要将cur的右节点进行一次递归调用。这样此时就变成了4->6->8。便完成了双向链表升序。
因此代码实现就为
由这个代码可知,如果知道题目中需要那种二叉树的遍历,例如前序遍历,就是根左右,就需要具体代码内容第一,左递归第二,最后为右递归的方式来进行代码实现。
其中还需要明白prev必须地址加引用,这样才能在递归中更改它的值,然后在进行往最小节点遍历时,需满足这个节点不为空,并且它的左节点不为空,当不满足时,就说明已经找到了最小节点,或者这个节点一开始就是空,没有内容。