题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
最简单方法:
中序遍历+list链表,再循环链表
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree==null){
return null;
}
List<TreeNode> list = new ArrayList();
inOrder(pRootOfTree,list);
for(int i=0;i<list.size();i++){
TreeNode tmp = list.get(i);
tmp.left=i>0?list.get(i-1):null;
tmp.right=i!=list.size()-1?list.get(i+1):null;
}
return list.get(0);
}
public void inOrder(TreeNode node,List<TreeNode> list){
if(node.left!=null){
inOrder(node.left,list);
}
list.add(node);
if(node.right!=null){
inOrder(node.right,list);
}
}
}