题解 | #从中序与后序遍历序列构造二叉树#
从中序与后序遍历序列构造二叉树
https://www.nowcoder.com/practice/ab8dde7f01f3440fbbb7993d2411a46b
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 inorder int整型一维数组 中序遍历序列 * @param postorder int整型一维数组 后序遍历序列 * @return TreeNode类 */ public TreeNode buildTree (int[] inorder, int[] postorder) { // write code here int n = inorder.length; return buildingTree(inorder, postorder, 0, n - 1, 0, n - 1); } private TreeNode buildingTree(int[] inorder, int[] postorder, int inStart, int inEnd, int postStart, int postEnd) { int rootIndex = inStart; TreeNode root = new TreeNode(postorder[postEnd]); for (int i = inStart; i <= inEnd; i++) { if (postorder[postEnd] == inorder[i]) { rootIndex = i; break; } } int offset = rootIndex - inStart; if (rootIndex > inStart) {//存在左子树 root.left = buildingTree(inorder, postorder, inStart, rootIndex - 1, postStart, postStart + offset - 1); } if (rootIndex < inEnd) {//存在右子树 root.right = buildingTree(inorder, postorder, rootIndex + 1, inEnd, postStart + offset, postEnd - 1); } return root; } }