折半查找二叉树的构造方法
时间: 2024-06-13 14:09:25 浏览: 19
折半查找二叉树的构造方法如下:
1. 按照结点总数先画出最大的满二叉树结构,并计算剩余几个结点。
2. 将剩余结点按照左子树结点个数<=右子树结点个数的规律依次填入最底层即为二叉判定树的树形。
3. 将给定序列依次按照中序遍历顺序填入各个结点。
举个例子,假设有以下序列:[1, 2, 3, 4, 5, 6, 7, 8, 9],则按照上述构造方法,折半查找二叉树的构造过程如下:
1. 最大的满二叉树结构如下:
```
1
/ \
2 3
/ \ / \
4 5 6 7
/
8
```
剩余结点个数为1。
2. 将剩余结点按照左子树结点个数<=右子树结点个数的规律依次填入最底层即为二叉判定树的树形,此时树形如下:
```
1
/ \
2 3
/ \ / \
4 5 6 7
/ \
8 9
```
3. 将给定序列依次按照中序遍历顺序填入各个结点,此时树形如下:
```
5
/ \
2 7
/ \ / \
1 4 6 9
/ /
3 8
```
相关问题
折半查找和二叉树查找
折半查找(Binary Search)和二叉树查找(Binary Tree Search)是两种常见的查找算法。
1. 折半查找是一种在有序数组中查找指定元素的算法。它的基本思想是将数组分成两部分,然后判断目标元素与中间元素的大小关系,进而确定目标元素在哪一部分中。如果目标元素等于中间元素,则查找成功;如果目标元素小于中间元素,则在前一部分中继续查找;如果目标元素大于中间元素,则在后一部分中继续查找。通过不断缩小查找范围,最终可以找到目标元素或确定目标元素不存在于数组中。
2. 二叉树查找是一种在二叉树中查找指定元素的算法。二叉树是一种特殊的树结构,每个节点最多有两个子节点。在二叉树查找中,首先比较目标元素与当前节点的值的大小关系,如果相等则查找成功;如果目标元素小于当前节点的值,则在左子树中继续查找;如果目标元素大于当前节点的值,则在右子树中继续查找。通过不断比较和移动,最终可以找到目标元素或确定目标元素不存在于二叉树中。
下面是两种查找算法的示例代码:
1. 折半查找:
```python
def binary_search(arr, target):
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
arr = [1, 3, 5, 7, 9]
target = 5
result = binary_search(arr, target)
print("Index of target element:", result) # 输出:2
```
2. 二叉树查找:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def binary_tree_search(root, target):
if root is None or root.val == target:
return root
if root.val < target:
return binary_tree_search(root.right, target)
else:
return binary_tree_search(root.left, target)
# 构建二叉树
root = TreeNode(5)
root.left = TreeNode(3)
root.right = TreeNode(7)
root.left.left = TreeNode(1)
root.left.right = TreeNode(4)
root.right.left = TreeNode(6)
root.right.right = TreeNode(9)
target = 4
result = binary_tree_search(root, target)
if result is not None:
print("Target element found in binary tree")
else:
print("Target element not found in binary tree")
```
php 折半查找 二叉树查找,有序表查找---折半查找算法
折半查找,也称为二分查找,是一种常见的查找算法。它是针对有序数组进行查找的。具体步骤如下:
1. 确定查找范围的左右边界,分别为 low 和 high,初始值分别为数组的第一个和最后一个元素的下标。
2. 计算中间位置 mid,即 mid = (low + high) / 2。
3. 比较中间位置的元素与要查找的值。如果相等,返回 mid;如果小于要查找的值,说明要查找的元素在右半部分,将 low 赋值为 mid + 1;如果大于要查找的值,说明要查找的元素在左半部分,将 high 赋值为 mid - 1。
4. 循环执行第 2 步到第 3 步,直到 low 大于 high,表示查找失败。
下面是 PHP 代码实现:
```php
function binarySearch($arr, $target) {
$low = 0;
$high = count($arr) - 1;
while ($low <= $high) {
$mid = intval(($low + $high) / 2);
if ($arr[$mid] == $target) {
return $mid;
} elseif ($arr[$mid] < $target) {
$low = $mid + 1;
} else {
$high = $mid - 1;
}
}
return -1;
}
```
除了折半查找,还有二叉树查找和有序表查找。二叉树查找是利用二叉树结构进行查找,每次比较当前节点的值与目标值的大小关系,然后根据大小关系往左或者往右走,直到找到目标值或者走到叶子节点为止。有序表查找是将有序表分成若干个子表,然后根据目标值与子表的范围比较,确定目标值可能在哪个子表中,然后再在该子表中进行折半查找。这两种算法的实现比较复杂,这里就不再赘述了。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)