Skip to content

Instantly share code, notes, and snippets.

@skdangi
Created November 8, 2013 19:50
Show Gist options
  • Save skdangi/7376589 to your computer and use it in GitHub Desktop.
Save skdangi/7376589 to your computer and use it in GitHub Desktop.
public class NodeSuccessor {
// Node class;; ignoring getters and setters for simplicity
private static class Node {
public Node(int value) {
this.value = value;
}
Node successor;
Node left;
Node right;
int value;
}
// Holds the last traversed node;; ignoring getters and setters for
// simplicity
private static class NodeHolder {
Node traversedNode;
}
public static void main(String[] args) {
Node node20 = new Node(20);
Node node30 = new Node(30);
Node node40 = new Node(40);
Node node50 = new Node(50);
Node node60 = new Node(60);
Node node90 = new Node(90);
Node node100 = new Node(100);
node20.left = node30;
node20.right = node40;
node30.left = node50;
node30.right = node60;
node60.left = node90;
node60.right = node100;
inOrderTraversal(node20);
setSucc(node20, new NodeHolder());
inOrderTraversal(node20);
}
public static void setSucc(Node node, NodeHolder nodeHolder) {
if (null == node) {// corner case for NULL Tree
return;
}
if (node.right != null) {
setSucc(node.right, nodeHolder);
}
node.successor = nodeHolder.traversedNode;
nodeHolder.traversedNode = node;
if (node.left != null) {
setSucc(node.left, nodeHolder);
}
}
public static void inOrderTraversal(Node node) {
if (null == node) {// corner case for NULL Tree
return;
}
if (node.left != null) {
inOrderTraversal(node.left);
}
System.out.println("Node :" + node.value + ", " + "Successor "
+ (node.successor == null ? null : node.successor.value));
if (node.right != null) {
inOrderTraversal(node.right);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment