📅  最后修改于: 2023-12-03 14:49:27.802000             🧑  作者: Mango
二叉搜索树(Binary Search Tree,简称BST)是一种排序二叉树,其中每个节点都含有一个键(key)和一个值(value),并且节点的键是唯一的。BST的左子树只包含键小于节点键的节点,右子树只包含键大于节点键的节点。因为BST具有这些特性,所以BST可以进行快速的查找、插入、删除操作。
在BST中,我们可以根据先序遍历、中序遍历或后序遍历构造出唯一的BST。本文将介绍如何从给定的后序遍历构造出一个BST。
从给定的后序遍历数组中,最后一个元素是根节点。我们可以把数组分成两部分:左子树的节点和右子树的节点。对于左子树,所有节点的键都小于根节点的键;对于右子树,所有节点的键都大于根节点的键。
然后我们可以递归的构建左右子树,直到子树中只剩下一个节点。
具体的构造方法如下:
/**
* Definition for a binary tree node.
* class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public TreeNode buildTree(int[] inorder, int[] postorder) {
if (postorder.length == 0) {
return null;
}
int n = postorder.length;
int rootVal = postorder[n - 1];
TreeNode root = new TreeNode(rootVal);
int i = 0;
while (i < n && inorder[i] != rootVal) {
i++;
}
int[] leftInorder = Arrays.copyOfRange(inorder, 0, i);
int[] rightInorder = Arrays.copyOfRange(inorder, i + 1, n);
int[] leftPostorder = Arrays.copyOfRange(postorder, 0, i);
int[] rightPostorder = Arrays.copyOfRange(postorder, i, n - 1);
root.left = buildTree(leftInorder, leftPostorder);
root.right = buildTree(rightInorder, rightPostorder);
return root;
}
本文介绍了如何从给定的后序遍历数组构造一个二叉搜索树。我们使用了递归的方法进行构造,在每次递归中,我们寻找根节点、划分子数组、递归计算左右子树并连接根节点、左子树和右子树。这样就可以得到一个BST。