0
点赞
收藏
分享

微信扫一扫

Leetcode106. 从中序与后序遍历序列构造二叉树


题目传送:​​https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/​​

运行效率

Leetcode106. 从中序与后序遍历序列构造二叉树_算法

代码如下:

class Solution {
public TreeNode buildTree(int[] inorder, int[] postorder) {
// 后序序列的最后一个元素就是根节点
int val = postorder[postorder.length - 1];
TreeNode root = new TreeNode(val);
// 找到根节点在中序序列中的位置
int index = findIndex(inorder, val);
// 然后根据这个位置,把中序序列切割成2个部分
// 左子树的节点个数
int leftChildLength = index;
// 右子树的节点个数
int rightChildLength = inorder.length - index - 1;

if (leftChildLength > 0) {
// 中序序列中 关于左子树的部分
int[] inOrderFisrtArray = Arrays.copyOfRange(inorder, 0, index);
// 后序序列中 关于左子树的部分
int[] postOrderFisrtArray = Arrays.copyOfRange(postorder, 0, leftChildLength);
TreeNode leftChild = buildTree(inOrderFisrtArray, postOrderFisrtArray);
root.left = leftChild;
}

if (rightChildLength > 0) {
// 中序序列中 关于右子树的部分
int[] inOrderSecondArray = Arrays.copyOfRange(inorder, index + 1, inorder.length);
// 后序序列中 关于右子树的部分
int[] postOrderSecondArray =
Arrays.copyOfRange(postorder, leftChildLength , postorder.length-1);
TreeNode rightChild = buildTree(inOrderSecondArray, postOrderSecondArray);
root.right = rightChild;
}
return root;
}

public int findIndex(int[] inorder, int val) {
for (int i = 0; i < inorder.length; i++) {
if (inorder[i] == val) {
return i;
}
}
return -1;
}
}


举报

相关推荐

0 条评论