题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
看了各位大神的解析,感觉就下面这个好懂一点,用一个ArrayList集合存储中序遍历的结果,然后让前一个指向后一个,再用后一个指向前一个即可。注意:双向链表头部左指针域指向空,尾部右指针域指向空,而不是互指,循环双向链表才互指。
import java.util.*;
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree==null)
{
return null;
}
List<TreeNode> list = new ArrayList<>();
InOrder(pRootOfTree,list);
TreeNode head = list.get(0);
TreeNode pre = head;
head.left = null;
for(int i=1;i<list.size();i++)
{
pre.right = list.get(i);
list.get(i).left = pre;
pre = pre.right;
}
return head;
}
private void InOrder(TreeNode root,List<TreeNode> list){
if(root==null)
{
return;
}
InOrder(root.left,list);
list.add(root);
InOrder(root.right,list);
}
}
京公网安备 11010502036488号