package com.interview.algorithms.tree; import com.interview.basics.model.tree.BinarySearchTree; import com.interview.basics.model.tree.BinaryTreeNode; /** * Created_By: stefanie * Date: 14-7-18 * Time: 下午8:45 * * Write a method to transfer a BinarySearchTree to a sorted LinkedList without using extra space. * * Use traverse method, keep tracking min and max of the subtree. * When visit left sub-tree, max of left sub-tree .next = node * When visit right sub-tree, min of right sub-tree .previous = node */ class MaxMinNode{ BinaryTreeNode max; BinaryTreeNode min; public MaxMinNode(BinaryTreeNode min, BinaryTreeNode max){ this.min = min; this.max = max; } public BinaryTreeNode getMax() { return max; } public BinaryTreeNode getMin() { return min; } } public class C5_17_BST2LinkedList { public static MaxMinNode transfer(BinarySearchTree tree){ MaxMinNode node = transfer(tree.getRoot()); return node; } public static MaxMinNode transfer(BinaryTreeNode node){ MaxMinNode cmm = new MaxMinNode(node, node); if(node.left != null) { MaxMinNode mm = transfer(node.left); mm.max.setRight(node); node.setLeft(mm.max); cmm.min = mm.min; } if(node.right != null) { MaxMinNode mm = transfer(node.right); mm.min.setLeft(node); node.setRight(mm.min); cmm.max = mm.max; } return cmm; } }