Construct Tree from Inorder & Preorder Java
- Get link
- X
- Other Apps
PROGRAM TO CONSTRUCT A BINARY TREE FROM PREORDER AND INORDER
import
java.util.*;
public
class
TreeNode {
int
val;
TreeNode left;
TreeNode right;
TreeNode(
int
x) { val = x; }
}
class
BinaryTree {
static
Set<TreeNode> set =
new
HashSet<>();
static
Stack<TreeNode> stack =
new
Stack<>();
// Function to build tree using given traversal
public
TreeNode buildTree(
int
[] preorder,
int
[] inorder)
{
TreeNode root =
null
;
for
(
int
pre =
0
, in =
0
; pre < preorder.length;) {
TreeNode node =
null
;
do
{
node =
new
TreeNode(preorder[pre]);
if
(root ==
null
) {
root = node;
}
if
(!stack.isEmpty()) {
if
(set.contains(stack.peek())) {
set.remove(stack.peek());
stack.pop().right = node;
}
else
{
stack.peek().left = node;
}
}
stack.push(node);
}
while
(preorder[pre++] != inorder[in] && pre < preorder.length);
node =
null
;
while
(!stack.isEmpty() && in < inorder.length &&
stack.peek().val == inorder[in]) {
node = stack.pop();
in++;
}
if
(node !=
null
) {
set.add(node);
stack.push(node);
}
}
return
root;
}
// Function to print tree in Inorder
void
printInorder(TreeNode node)
{
if
(node ==
null
)
return
;
/* first recur on left child */
printInorder(node.left);
/* then print the data of node */
System.out.print(node.val +
" "
);
/* now recur on right child */
printInorder(node.right);
}
// driver program to test above functions
public
static
void
main(String args[])
{
BinaryTree tree =
new
BinaryTree();
int
in[] =
new
int
[] {
9
,
8
,
4
,
2
,
10
,
5
,
10
,
1
,
6
,
3
,
13
,
12
,
7
};
int
pre[] =
new
int
[] {
1
,
2
,
4
,
8
,
9
,
5
,
10
,
10
,
3
,
6
,
7
,
12
,
13
};
int
len = in.length;
TreeNode root = tree.buildTree(pre, in);
tree.printInorder(root);
}
}
OUTPUT:
9 8 4 2 10 5 10 1 6 3 13 12 7
- Get link
- X
- Other Apps
Comments
Post a Comment