根据二叉树的先序遍历和中序遍历重建二叉树

xiaoxiao2021-02-28  48

题目:

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

程序:

public class Solution { public static void main(String[] args) { int[] pre = {1,2,3,4,5,6,7}; int[] in = {3,2,4,1,6,5,7}; TreeNode root = reConstructBinaryTree(pre, in); print(root); } public static TreeNode reConstructBinaryTree(int [] pre,int [] in) { return construct(pre, in, 0, 0, pre.length - 1); } private static TreeNode construct(int[] pre, int[] in, int index, int l, int r) { int inIndex; if (index >= pre.length || (inIndex = indexOf(pre[index], in)) < l || inIndex > r) return null; TreeNode pNode = new TreeNode(pre[index]); pNode.left = construct(pre, in, index + 1, l, inIndex - 1); pNode.right = construct(pre, in, index + inIndex - l + 1, inIndex + 1, r); return pNode; } private static int indexOf(int target, int[] arr) { for (int i = 0; i < arr.length; i++) { if (target == arr[i]) return i; } return -1; } //节点 static class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public static void print(TreeNode p) { System.out.print(p.val + " "); if (p.left != null) print(p.left); if (p.right != null) print(p.right); } }
转载请注明原文地址: https://www.6miu.com/read-73609.html

最新回复(0)