package com.anuragkapur.ds.tree; /** * @author anuragkapur */ public class BSTSuccessorAndPredecessor { BSTMinAndMax minAndMax = new BSTMinAndMax(); public TreeNode getSuccessor(TreeNode givenNode) { if (givenNode == null) { return null; } if (givenNode.getRight() != null) { return minAndMax.getMin(givenNode.getRight()); } else { TreeNode ancestor = givenNode.getParent(); while (ancestor != null && ancestor.getLeft() != givenNode) { givenNode = ancestor; ancestor = ancestor.getParent(); } return ancestor; } } public TreeNode getPredecessor(TreeNode givenNode) { if (givenNode == null) { return null; } if (givenNode.getLeft() != null) { return minAndMax.getMax(givenNode.getLeft()); } else { TreeNode ancestor = givenNode.getParent(); while (ancestor != null && ancestor.getRight() != givenNode) { givenNode = ancestor; ancestor = ancestor.getParent(); } return ancestor; } } }