思路:由于是二叉搜索树,那么在遍历二叉树的时候就可以得到一个升序的序列,然后使用这个序列就可以转换成双向链表。
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.*;
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree == null) return null;
ArrayList<TreeNode> list = new ArrayList<>();
preOrder(list, pRootOfTree);
return buildTree(list);
}
public static TreeNode buildTree(ArrayList<TreeNode> list) { //转换为双向链表
TreeNode pHead = list.get(0);
TreeNode cur = pHead;
for(TreeNode node : list) {
if(pHead == node) continue;
node.left = cur;
cur.right = node;
cur = node;
}
return pHead;
}
public static void preOrder(ArrayList<TreeNode> list, TreeNode pRootOfTree) { //前序遍历
if(pRootOfTree == null) {
return ;
}
preOrder(list, pRootOfTree.left);
list.add(pRootOfTree);
preOrder(list, pRootOfTree.right);
}
} 
京公网安备 11010502036488号