using System.Collections.Generic;
public class TreeNode<T>{
public T Data {get; set;}
public TreeNode<T> Left {get; set;}
public TreeNode<T> Right {get; set;}
public static TreeNode<int> CreateBST(){
var rootNode = new TreeNode<int>(10){
Left = new TreeNode<int>(3){
Left = new TreeNode<int>(2),
Right = new TreeNode<int>(5){
Right = new TreeNode<int>(6)
Right = new TreeNode<int>(12){
Left = new TreeNode<int>(11),
Right = new TreeNode<int>(20){
Left = new TreeNode<int>(14)
public static void PrintSequences(List<List<int>> seqs){
foreach(var seq in seqs){
Console.Write(elm + " ");
private static void BST_Sequences(List<TreeNode<int>> options, List<int> currSeq, List<List<int>> seqs){
seqs.Add(new List<int>(currSeq));
foreach (var option in options){
currSeq.Add(option.Data);
var newOptions = new List<TreeNode<int>>(options);
newOptions.Remove(option);
if (option.Left != null) newOptions.Add(option.Left);
if (option.Right != null) newOptions.Add(option.Right);
BST_Sequences(newOptions, currSeq, seqs);
currSeq.Remove(option.Data);
public static List<List<int>> BST_Sequences(TreeNode<int> node){
var seqs = new List<List<int>>();
var options = new List<TreeNode<int>>(){node};
var currSeq = new List<int>();
BST_Sequences(options, currSeq, seqs);
public static void Main()
var seqs = BST_Sequences(CreateBST());