Java怎么根據(jù)前序后序構(gòu)建二叉樹(shù)

小億
83
2024-03-15 15:54:59

在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ù)。

0