Python中预排序二叉搜索树的叶节点
二叉树是一种包含不同节点的二叉数据结构,其中每个节点最多有两个子节点。这些节点遵循一些属性,包括:
- 二叉树的左节点的值小于根节点的值。
- 二叉树的右节点的值比根节点的值大。
- 所有子节点都必须遵循上述属性。
我们可以通过不同的方式来遍历二叉搜索树:
- 无序Inorder
- 前序Preorder
- 后序Postorder
中序算法:
- 左子树
- 根节点
- 右子树
预购算法:
- 根节点
- 左子树
- 右子树
后序算法:
- 左子树
- 右子树
- 根节点
问题陈述
我们有一个二叉搜索树的预序。我们需要从给定的二叉搜索树的预序中打印前导节点。二叉搜索树中可以有任意数量的叶节点。
考虑所有节点值都是正数并且已经被预先排序。我们必须打印树中的叶节点。
让我们通过几个例子来理解这个问题。
示例1:
输入:
{ 300 , 224 , 125 , 70 , 149 , 388 }
输出:
70 149 388
解释:
给定的二叉搜索树是:
第一个元素将是根,如前序遍历一样;我们首先遍历根节点,然后遍历左子树 ,然后遍历右子树。大于根节点的元素是左子树中的元素,其余的元素是右子树中的元素。使用此输入创建二叉搜索树后,我们得到元素 [70, 149, 388] 作为叶节点。
示例2:
输入:
{ 42, 30, 27, 23, 19, 22, 26, 29, 15, 32, 31, 35, 38 }
输出:
15 22 26 29 31 38
解释:
第一个元素将是根,如前序遍历一样;我们首先遍历根节点,然后遍历左子树,然后遍历右子树。使用此输入创建二叉搜索树后,我们得到元素[15, 22, 26, 29, 31, 38]是叶节点。
从二叉搜索树的前序中查找叶节点有两种方法。
1、简单方法
在此,我们首先使用中序数组和预序数组来查找二叉搜索树的预序。我们首先迭代前序数组,然后找到中序数组的元素。
def Search(inorder, ln, rn, k): |
输出:
The Leaf Nodes present in the binary search tree are:
15 22 26 29 31 38
解释:
首先,我们将遍历数组以查找无序数组中的元素。我们使用二进制搜索,因为它以升序遍历。我们将查找元素的范围设置为 [L,R]。如果 L 的值等于 R,我们就会得到叶节点。现在,我们将从 L = 0 和 R = node - 1 的值开始查找预序数组的根节点。为了搜索左侧子树的元素,我们设置 L = 0 和 R = root index。对于右侧子树,我们设置set L = root index + 1,R = node -1。
2.使用堆栈stack
我们将使用堆栈,并使用两个指针遍历数组。
def leafNode(preorder, node): |
输出:
The Leaf Nodes present in the binary search tree are:
54 78 44
解释:
开始时,i = 0,j = 1。比较 array 和 array[j],如果 array > array[j],则表示 array[j] 在 a 的左边。然后,a 将被推入堆栈。现在我们将弹出元素,直到 array > 栈顶元素,然后打印第 j 个值。第 j 个值将是二叉搜索树的叶子节点。