题解 | 重建二叉树
四种主要的遍历思想为:
前序遍历:根结点 ---> 左子树 ---> 右子树
中序遍历:左子树---> 根结点 ---> 右子树
后序遍历:左子树 ---> 右子树 ---> 根结点
层次遍历:只需按层次遍历即可
本题是根据遍历得到的顺序进行反推。这里最重要的是掌握通过前序遍历的第一节点后中序遍历的数组进行左右子树的划分。搞清楚这个点之后问题解决就会比较简单了
import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param preOrder int整型一维数组 * @param vinOrder int整型一维数组 * @return TreeNode类 */ public TreeNode reConstructBinaryTree (int[] preOrder, int[] vinOrder) { int m = preOrder.length; if(m ==0) return null; TreeNode root = new TreeNode(preOrder[0]); for(int i=0; i < vinOrder.length; i++){ if(preOrder[0] == vinOrder[i]){ root.left = reConstructBinaryTree(Arrays.copyOfRange(preOrder,1, i+1), Arrays.copyOfRange(vinOrder, 0, i)); root.right = reConstructBinaryTree(Arrays.copyOfRange(preOrder, i+1, m), Arrays.copyOfRange(vinOrder,i+1,m)); break; } } return root; // write code here } }