剑指Offer 重建二叉树

it2024-01-03  55

题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 1、Java (1)先序遍历:根节点→左子树→右子树。 中序遍历:左子树→根节点→右子树。 后续遍历:左子树→右子树→根节点。

先序遍历先根便利开始,所以第一个为根节点,然后将中序便利分割成左节点集合和右节点集合,然后通过递归创建二叉树。

/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ import java.util.ArrayList; import java.util.List; public class Solution { public TreeNode reConstructBinaryTree(int [] pre,int [] in) { List<Integer> prelist = new ArrayList<>(); List<Integer> inlist = new ArrayList<>(); for(int i= 0;i<pre.length;i++){ prelist.add(pre[i]); inlist.add(in[i]); } return helper(prelist,inlist); } public TreeNode helper(List<Integer> pre,List<Integer> in){ if(in.size() == 0){ return null; } int rootval = pre.remove(0); TreeNode root = new TreeNode(rootval); int min = in.indexOf(rootval); root.left = helper(pre,in.subList(0,min)); root.right = helper(pre,in.subList(min+1,in.size())); return root; } }
最新回复(0)