思路是先序遍历,先根节点root,然后左子树,最后右子树,存入链表中。然后使得前一个根节点的左节点为空pre.left=null,右节点为下一个即可,pre.right=curr即可。
```java
class Solution {
public void flatten(TreeNode root) {
List<TreeNode> list=new ArrayList<TreeNode>();
PreTraversal(root,list);
//在链表中遍历当前节点的左子树为null,右子树为下一节点
for(int i=1;i<list.size();i++){
TreeNode pre=list.get(i-1);
TreeNode curr=list.get(i);
pre.left=null;
pre.right=curr;
}
}
public void PreTraversal(TreeNode root, List<TreeNode> list){
//使用先序遍历存入链表
if(root!=null){
list.add(root);
PreTraversal(root.left,list);
PreTraversal(root.right,list);
}
}
}