题目描述:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解题思路:
二叉搜索树的中序遍历序列即为有序的序列,故可以首先把二叉排序树中序排列,然后保存排序结果再改变指针方向即可完成,注意特殊情况,若中序序列只有0个或者1个,直接返回二叉排序树的根节点即可。
代码(java):
/**
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) {
ArrayList<TreeNode> res=new ArrayList<TreeNode>();
intravel(res,pRootOfTree);
for(int i=1;i<res.size()-1;i++){
res.get(i).left=res.get(i-1);
res.get(i).right=res.get(i+1);
}
if(res.size()<2)return pRootOfTree;
res.get(0).left=null;
res.get(0).right=res.get(1);
res.get(res.size()-1).left=res.get(res.size()-2);
res.get(res.size()-1).right=null;
return res.get(0);
}
public void intravel(ArrayList<TreeNode> res,TreeNode pRootOfTree){
if(pRootOfTree==null)return;
intravel(res,pRootOfTree.left);
res.add(pRootOfTree);
intravel(res,pRootOfTree.right);
}
}