题目:将二叉搜索树转换为递增的双向链表
/*
// Definition for a Node.
class Node {
public int val;
public Node left;
public Node right;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val,Node _left,Node _right) {
val = _val;
left = _left;
right = _right;
}
};
*/
//二叉搜索树中序遍历为递增序列
class Solution {
Node head,pre;
public Node treeToDoublyList(Node root) {
if(root == null){
return null;
}
dfs(root); //开启中序遍历,遍历结束后 pre存的为尾节点
head.left = pre; //头节点左子节点指向尾节点
pre.right = head; //尾节点右子节点指向头节点,形成循环链表。
return head;
}
//中序遍历
public void dfs(Node cur){
if(cur == null){
return;
}
dfs(cur.left);
if(pre==null){ //前驱为空,说明刚开始遍历第一个节点,此时cur节点为head节点
head = cur;
}else{
pre.right = cur; //前驱右子节点指向先一个节点
}
cur.left = pre; //当前左子节点指向前驱
pre = cur; //前驱向前移一步
dfs(cur.right);
}
}