chensheng@biheap.com:~$

Tree To List

// A Java program for in-place conversion of Binary Tree to DLL 

// A binary tree node has data, left pointers and right pointers 
class Node 
{ 
	int data; 
	Node left, right; 

	public Node(int data) 
	{ 
		this.data = data; 
		left = right = null; 
	} 
} 

class BinaryTree 
{ 
	Node root; 

	// head --> Pointer to head node of created doubly linked list 
	Node head; 

	// Initialize previously visited node as NULL. This is 
	// static so that the same value is accessible in all recursive 
	// calls 
	static Node prev = null; 

	// A simple recursive function to convert a given Binary tree 
	// to Doubly Linked List 
	// root --> Root of Binary Tree 
	void BinaryTree2DoubleLinkedList(Node root) 
	{ 
		// Base case 
		if (root == null) 
			return; 

		// Recursively convert left subtree 
		BinaryTree2DoubleLinkedList(root.left); 

		// Now convert this node 
		if (prev == null) 
			head = root; 
		else
		{ 
			root.left = prev; 
			prev.right = root; 
		} 
		prev = root; 

		// Finally convert right subtree 
		BinaryTree2DoubleLinkedList(root.right); 
	} 

	/* Function to print nodes in a given doubly linked list */
	void printList(Node node) 
	{ 
		while (node != null) 
		{ 
			System.out.print(node.data + " "); 
			node = node.right; 
		} 
	} 

	// Driver program to test above functions 
	public static void main(String[] args) 
	{ 
		// Let us create the tree as shown in above diagram 
		BinaryTree tree = new BinaryTree(); 
		tree.root = new Node(10); 
		tree.root.left = new Node(12); 
		tree.root.right = new Node(15); 
		tree.root.left.left = new Node(25); 
		tree.root.left.right = new Node(30); 
		tree.root.right.left = new Node(36); 

		// convert to DLL 
		tree.BinaryTree2DoubleLinkedList(tree.root); 

		// Print the converted List 
		tree.printList(tree.head); 

	} 
} 
// This code has been contributed by Mayank Jaiswal(mayank_24)