static Node newNode(int data)
node.left = node.right = null;
static int height(Node root)
int lheight = height(root.left);
int rheight = height(root.right);
return Math.Max(lheight, rheight) + 1;
static void rightToLeft(Node root, int level, INT f)
if (level == 1 && f.a == 0)
Console.Write("{0} ", root.data);
rightToLeft(root.right, level - 1, f);
rightToLeft(root.left, level - 1, f);
static void leftToRight(Node root, int level, INT f)
if (level == 1 && f.a == 1)
Console.Write("{0} ", root.data);
leftToRight(root.left, level - 1, f);
leftToRight(root.right, level - 1, f);
static void printExtremeNodes(Node root)
for (int i = 1; i <= h; i++)
public static void Main()
root.left.left = newNode(4);
root.left.right = newNode(5);
root.right.right = newNode(7);
root.left.left.left = newNode(8);
root.left.left.right = newNode(9);
root.left.right.left = newNode(10);
root.left.right.right = newNode(11);
root.right.right.left = newNode(14);
root.right.right.right = newNode(15);
root.left.left.left.left = newNode(16);
root.left.left.left.right = newNode(17);
root.right.right.right.right = newNode(31);