题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路 根据二叉搜索树的特点,通过中序遍历得到的是有序的。
自己写的low代码
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.ArrayList;
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
ArrayList<TreeNode> nodes =new ArrayList<TreeNode>();//保存所有的节点;
//由于是二叉搜索树,所以采用中序遍历;
midTraveral(pRootOfTree,nodes);
//重新构建双向链表;
if(!nodes.isEmpty()) {
TreeNode p = nodes.get(0);//移动指针;
for(int i=1;i<nodes.size();i++) {
p.right = nodes.get(i);
nodes.get(i).left = p;
p=nodes.get(i);
}
//头和尾;
nodes.get(nodes.size()-1).right = null;
nodes.get(0).left = null;
return nodes.get(0);
}else {
return null;
}
}
//中序遍历;
private void midTraveral(TreeNode root,ArrayList<TreeNode>list) {
if(root==null) {
return ;
}
midTraveral(root.left,list);
list.add(root);
midTraveral(root.right,list);
}
}