public int Value {get; private set;}
public TreeNode Left {get; private set;}
public TreeNode Right {get; private set;}
public TreeNode(int @value, TreeNode left = null, TreeNode right = null)
public static void InOrderTraversal(TreeNode root)
InOrderTraversal(root.Left);
Console.WriteLine(root.Value);
InOrderTraversal(root.Right);
static TreeNode previous = null;
public static void InOrderSuccessor(TreeNode root, int target)
InOrderSuccessor(root.Left, target);
if(previous != null && previous.Value == target)
Console.WriteLine(root.Value);
InOrderSuccessor(root.Right, target);
public static void Main()
TreeNode root = new TreeNode(10, new TreeNode(7, new TreeNode(5), new TreeNode(9)), new TreeNode(35, new TreeNode(30), new TreeNode(45)));
InOrderSuccessor(root, 10);