@@ -38,7 +38,94 @@ Solution: There are many types of sorting algorithms: quick sort, bubble sort, b
38
38
39
39
## Some common algorithm problems asked at online tests :
40
40
41
- #### 10. Save all leaf nodes of a Binary tree in a Doubly Linked List by using Right node as Next node and Left Node as Previous Node.
41
+ ## 10. Save all leaf nodes of a Binary tree in a Doubly Linked List by using Right node as Next node and Left Node as Previous Node.
42
+
43
+ ```
44
+ # Python program to extract leaf nodes from binary tree
45
+ # using double linked list
46
+
47
+ # A binary tree node
48
+ class Node:
49
+
50
+ # Constructor to create a new node
51
+ def __init__(self, data):
52
+ self.data = data
53
+ self.left = None
54
+ self.right = None
55
+
56
+ # Main function which extracts all leaves from given Binary Tree.
57
+ # The function returns new root of Binary Tree (Note that
58
+ # root may change if Binary Tree has only one node).
59
+ # The function also sets *head_ref as head of doubly linked list.
60
+ # left pointer of tree is used as prev in DLL
61
+ # and right pointer is used as next
62
+ def extractLeafList(root):
63
+
64
+ # Base Case
65
+ if root is None:
66
+ return None
67
+
68
+ if root.left is None and root.right is None:
69
+ # This node is going to be added to doubly linked
70
+ # list of leaves, set pointer of this node as
71
+ # previous head of DLL. We don't need to set left
72
+ # pointer as left is already None
73
+ root.right = extractLeafList.head
74
+
75
+ # Change the left pointer of previous head
76
+ if extractLeafList.head is not None:
77
+ extractLeafList.head.left = root
78
+
79
+ # Change head of linked list
80
+ extractLeafList.head = root
81
+
82
+ return None # Return new root
83
+
84
+ # Recur for right and left subtrees
85
+ root.right = extractLeafList(root.right)
86
+ root.left = extractLeafList(root.left)
87
+
88
+ return root
89
+
90
+ # Utility function for printing tree in InOrder
91
+ def printInorder(root):
92
+ if root is not None:
93
+ printInorder(root.left)
94
+ print root.data,
95
+ printInorder(root.right)
96
+
97
+
98
+ def printList(head):
99
+ while(head):
100
+ if head.data is not None:
101
+ print head.data,
102
+ head = head.right
103
+
104
+ # Driver program to test above function
105
+ extractLeafList.head = Node(None)
106
+ root = Node(1)
107
+ root.left = Node(2)
108
+ root.right = Node(3)
109
+ root.left.left = Node(4)
110
+ root.left.right = Node(5)
111
+ root.right.right = Node(6)
112
+ root.left.left.left = Node(7)
113
+ root.left.left.right = Node(8)
114
+ root.right.right.left = Node(9)
115
+ root.right.right.right = Node(10)
116
+
117
+ print "Inorder traversal of given tree is:"
118
+ printInorder(root)
119
+
120
+ root = extractLeafList(root)
121
+
122
+ print "\nExtract Double Linked List is:"
123
+ printList(extractLeafList.head)
124
+
125
+ print "\nInorder traversal of modified tree is:"
126
+ printInorder(root)
127
+
128
+ ```
42
129
43
130
#### 11. Given an array,find the maximum j – i such that arr[ j] > arr[ i]
44
131
0 commit comments