题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
方法1:
思路:中序遍历BST,节点存入queue,从queue中依次弹出节点,并按照弹出的顺序重连所有的节点即可。
1 import java.util.*; 2 class TreeNode { 3 int val = 0; 4 TreeNode left = null; 5 TreeNode right = null; 6 7 public TreeNode(int val) { 8 this.val = val; 9 10 } 11 12 } 13 public class Solution { 14 public TreeNode Convert(TreeNode pRootOfTree) { 15 Queue<TreeNode> queue=new LinkedList<TreeNode>(); 16 inOrderToQueue(pRootOfTree,queue); 17 if (queue.isEmpty()) { 18 return pRootOfTree; 19 } 20 TreeNode head=queue.poll(); 21 TreeNode pre=head; 22 pre.left=null; 23 TreeNode cur=null; 24 while (!queue.isEmpty()) { 25 cur=queue.poll(); 26 pre.right=cur; 27 cur.left=pre; 28 pre=cur; 29 } 30 pre.right=null; 31 return head; 32 } 33 public void inOrderToQueue(TreeNode node,Queue<TreeNode> queue) { 34 if (node==null) { 35 return; 36 } 37 inOrderToQueue(node.left,queue); 38 queue.offer(node); 39 inOrderToQueue(node.right,queue); 40 } 41 }