题目
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路
中序遍历二叉树得到排序好的链表
再调整指针
代码
import java.util.ArrayList;
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree == null) return null;
ArrayList<TreeNode> list = new ArrayList<>();
In(pRootOfTree,list);
return Convert(list);
}
//中序遍历
public void In(TreeNode root, ArrayList<TreeNode> list){
if(root.left != null){
In(root.left,list);
}
//注意是把节点存入 而不是值
list.add(root);
if(root.right != null){
In(root.right,list);
}
}
TreeNode Convert(ArrayList<TreeNode> list){
//i < list.size()-1
for(int i = 0; i < list.size()-1; i++){
list.get(i).right = list.get(i+1);
list.get(i+1).left = list.get(i);
}
return list.get(0);
}
}