题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路1分析:步骤如下
1.通过中序遍历二叉搜索树的结点保存到数组中,得到了有序的数组,数组里面存储了树结点;
2.遍历一遍数组建立结点之间的联系;
/** 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 root) { if(root==null) return null; ArrayList<TreeNode>list=new ArrayList<>(); Inorder(list,root);//之后list里面保存了搜索二叉树的顺序遍历的结点序列 return Change(list); } public void Inorder(ArrayList<TreeNode>list,TreeNode root){ if(root!=null){ Inorder(list,root.left); list.add(root); Inorder(list,root.right); } } public TreeNode Change(ArrayList<TreeNode>list){ TreeNode head=list.get(0); TreeNode p=head; for(int i=1;i<list.size();i++){ TreeNode tmp=list.get(i); tmp.left=p; p.right=tmp; p=tmp; } return list.get(0); } }