Suppose we are given preorder and inorder tree traversal data, is it possible to recreate original Binary tree? Yes it is.
1: static Node DeserializePreInorder(int[] preorder, int[] inorder)
2: {
3: int[] mapping = new int[inorder.Length];
4: for (int i = 0; i < inorder.Length; i++)
5: {
6: mapping[inorder[i]] = i;
7: }
8: int start = 0;
9: return DeserializePreInorder(preorder, inorder, mapping, 0, inorder.Length, ref start);
10: }
11:
12: static Node DeserializePreInorder(int[] preorder, int[] inorder, int[] mapping, int low, int high, ref int readPointer)
13: {
14: if (low == high)
15: {
16: return null;
17: }
18: Node root = new Node { data = preorder[readPointer++] };
19: int dividerIndex = mapping[root.data];
20: root.left = DeserializePreInorder(preorder, inorder, mapping, low, dividerIndex, ref readPointer);
21: root.right = DeserializePreInorder(preorder, inorder, mapping, dividerIndex + 1, high, ref readPointer);
22: return root;
23: }
For detailed discussion see here
No comments:
Post a Comment