In: Computer Science
write a function that takes as input
the root of a general tree and returns a binary tree generated by
the conversion
process illustrated in java
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);
}
}