二叉搜索树与双向链表(中等)
2020年9月2日
题目来源:力扣
解题
看案例,是要我们找到二叉搜索树从小到大的节点链表,这个时候就能想到中序遍历(LDR)取出的节点就是从小到大的顺序。
那么自然的我们就能构造一个链表了,但是我们还需要考虑链表是双向的,那么需要在递归中每次都复制当前节点去跟全局的节点创建关系。
最后不要忘记把第一个节点跟最后一个节点建立双向关系。
/*
// 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 tmp_res=new Node();
Node res=tmp_res;
public Node treeToDoublyList(Node root) {
if(root==null) return null;
//中序遍历拿到节点
recur(root);
//初始化结果res
res=res.right;
//第一个节点和最后一个节点建立关系
res.left=tmp_res;
tmp_res.right=res;
return res;
}
private void recur(Node root){
if(root==null) return;
recur(root.left);
//复制当前节点
Node tmp_root=new Node(root.val);
//与结果节点建立联系
tmp_res.right=tmp_root;
tmp_root.left=tmp_res;
//结果节点往右移动一步
tmp_res=tmp_res.right;
recur(root.right);
}
}