在Java中,可以根據(jù)給定的前序遍歷和后序遍歷數(shù)組構(gòu)建二叉樹(shù)。下面是一個(gè)示例代碼:
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
public class BinaryTreeBuilder {
public TreeNode buildTree(int[] preOrder, int[] postOrder) {
return buildTreeHelper(preOrder, postOrder, 0, preOrder.length - 1, 0, postOrder.length - 1);
}
private TreeNode buildTreeHelper(int[] preOrder, int[] postOrder, int preStart, int preEnd, int postStart, int postEnd) {
if (preStart > preEnd || postStart > postEnd) {
return null;
}
TreeNode root = new TreeNode(preOrder[preStart]);
if (preStart == preEnd) {
return root;
}
int leftRootVal = preOrder[preStart + 1];
int leftRootIndex = postStart;
while (postOrder[leftRootIndex] != leftRootVal) {
leftRootIndex++;
}
int leftTreeSize = leftRootIndex - postStart + 1;
root.left = buildTreeHelper(preOrder, postOrder, preStart + 1, preStart + leftTreeSize, postStart, leftRootIndex);
root.right = buildTreeHelper(preOrder, postOrder, preStart + leftTreeSize + 1, preEnd, leftRootIndex + 1, postEnd - 1);
return root;
}
}
在這段代碼中,我們首先定義了一個(gè)TreeNode
類表示二叉樹(shù)的節(jié)點(diǎn)。然后定義了一個(gè)BinaryTreeBuilder
類來(lái)構(gòu)建二叉樹(shù)。在buildTree
方法中,我們調(diào)用buildTreeHelper
方法來(lái)遞歸構(gòu)建二叉樹(shù)。在buildTreeHelper
方法中,我們首先創(chuàng)建根節(jié)點(diǎn),并根據(jù)前序遍歷數(shù)組和后序遍歷數(shù)組的特點(diǎn),找到左子樹(shù)的根節(jié)點(diǎn)值和左子樹(shù)的大小,然后遞歸構(gòu)建左子樹(shù)和右子樹(shù)。
最后,我們可以調(diào)用buildTree
方法來(lái)構(gòu)建二叉樹(shù),并傳入前序遍歷數(shù)組和后序遍歷數(shù)組作為參數(shù)。