题目描述:
https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5
思路:双向链表的结构其实就是中序遍历,可以先将数据转为中序遍历的数组,最后在遍历数组,新建链表
而树中的right就可以看做是双向链表中的next,而left就可以看做是双向链表的pre
import java.util.ArrayList;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
// 中序遍历
public class Solution {
TreeNode res=null;
ArrayList<Integer> list=new ArrayList<>();
ArrayList order(TreeNode pRootOfTree){
if(pRootOfTree==null){
return list;
}
order(pRootOfTree.left);
list.add(pRootOfTree.val);
order(pRootOfTree.right);
return list;
}
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree==null){
return pRootOfTree;
}
order(pRootOfTree);
int n=list.size();
TreeNode head=new TreeNode(list.get(0));
res=head;
for(int i=1;i<n;i++){
TreeNode temp=new TreeNode(list.get(i));
head.right=temp;
head=head.right;
}
for(int i=n-2;i>=0;i--){
head.left=new TreeNode(list.get(i));
head=head.left;
}
return res;
}
}