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); } }