例子问题
例子问题2:搜索
二叉搜索树的序遍历和序遍历之间的区别是什么?
唯一的区别是in order处理根节点,而preorder不处理。
顺序遍历先处理左子树,再处理根节点,再处理右子树,而预顺序遍历先处理根节点,再处理左子树,再处理右子树。
Preorder从最低到最高搜索树,inorder则不是。
顺序遍历先处理右子树,然后是根节点,再是左子树,而预顺序遍历先处理左子树,然后是根节点,再是右子树。
它们是相似的。
顺序遍历先处理左子树,再处理根节点,再处理右子树,而预顺序遍历先处理根节点,再处理左子树,再处理右子树。
在这种情况下,名称有助于识别不同类型的遍历。顺序遍历“按顺序”处理二叉树,这意味着它将遍历左边的子树,处理节点,然后继续到右边。为什么是这样?因为要记住,二叉排序树会列出任何小于左边节点的值,以及任何大于右边节点的值,所以按顺序遍历实际上是从最大到最小。
前序遍历与前序遍历相同,只是它处理根节点首先,因此才有了“pre”顺序。
例子问题1:二进制
Public static int foo(int[] arr, int x) {
Int a = 0;
Int b = arr。长度- 1;
While (b >= a) {
Int c = (a + b) / 2;
Int v = arr[c];
如果(v == x) {
返回c;
} if(v < x) {
A = c + 1;
}其他{
B = c - 1;
}
}
返回1;
}
价值是什么y在下面的代码:
int[]瓦尔斯={1, 3, 4, 5, 6, 31日,41岁的51个};
intx= 41;
inty= foo (瓦尔斯、41);
-1
7
6
5
41
6
方法代码中首先要注意的是喷火它实现了二分搜索的算法。的值c作为算法的中点。这要求列表是有序的。的值一个而且b用于控制循环,以便让您搜索列表的正确部分。如果列表中间的值不等于您正在寻找的值(即。x),那么它在列表中看起来要么“在上面”,要么“在下面”(因为它被假定是有序的)。这就是发生的事情一个或b是改变。
它搜索值并返回索引号如果找到了该值。否则,返回-1。因为值41在数组中,所以它返回6。
如果你不认识这个算法,你可能会有一些问题,并将不得不跟踪代码!!
例子问题1:二进制
对于二分搜索算法,下列哪项是正确的?
数组必须按照从开始到结束的顺序进行探测。
数组可以不排序,但运行速度会比排序慢。
数组需要额外的空间来容纳作为搜索一部分的交换操作。
在搜索值之前,必须将数组转换为二叉搜索树。
要搜索的数组必须在搜索前排序。
要搜索的数组必须在搜索前排序。
二分搜索假设正在搜索的数组已经排序。这是因为它探测数组中的值的方式不同。它从数组的中心开始检查值是否匹配。如果该值小于该中心元素,则假定该值位于数组的下半部分。否则,它假定值必须更大,因此在数组的上半部分。然后探查它所选择的任何一半的中心,继续这样做,直到确定没有找到值。