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);
    }
}