鱼C论坛

 找回密码
 立即注册
查看: 1978|回复: 4

[已解决]二叉树访问

[复制链接]
发表于 2022-7-16 16:24:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目 , 代码贴上 , 有点不理解代码
思路是不是 : 先给它一个范围 , 由于二叉搜索树的性质 (左边比根小,  右边比根大) 然后可以确定走的方向
但是为什么范围的确定与 tree[i] 有关 ? 万一当前访问的是别的子树呢 ?
屏幕截图 2022-07-16 161921.png
  1. #include <bits/stdc++.h>
  2. using namespace std;

  3. int tree[1005];
  4. int n, q, x;


  5. int main(){
  6.     ios::sync_with_stdio(0);
  7.     cin.tie(0); cout.tie(0);
  8.    
  9.     cin >> n;
  10.     for(int i = 1; i <= n; i++){
  11.         cin >> tree[i];
  12.     }
  13.     cin >> q;
  14.     while(q--){
  15.         cin >> x;
  16.         int l = 1, r = n;
  17.         for(int i = 1; i <= n; i++){
  18.             if(tree[i] >= l && tree[i] <= r){
  19.                 if(tree[i] == x){
  20.                     cout << endl;
  21.                     break;
  22.                 }
  23.                 else if(tree[i] > x){
  24.                     cout << 'E';
  25.                     r = tree[i] - 1;  // 就是这里
  26.                 }
  27.                 else{
  28.                     cout << 'W';
  29.                     l = tree[i] + 1; // 就是这里
  30.                 }
  31.             }
  32.         }
  33.     }
  34.    
  35.     return 0;
  36. }
复制代码

输入输出 :
  1. 4
  2. 2 1 4 3
  3. 3
  4. 1 2 3
复制代码
  1. E

  2. WE
复制代码
最佳答案
2022-7-16 18:53:29
这里的 l 和 r 框定了当前处理的子树中节点值的范围。由于输入是 1 到 n 的一个排列,因此节点在当前考察的子树当且仅当其值在 l 和 r 确定的范围之内。从代码也能看出,遍历中不在范围的点不会被处理。另外由于按照输入的顺序向空树插入值,输入序列中最先出现的属于当前子树的节点一定是该子树的根,因此根据其值确定已经找到还是选定新的子树,即调整 l 和 r 的值。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-16 18:04:06 | 显示全部楼层

救救我
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-16 18:53:29 | 显示全部楼层    本楼为最佳答案   
这里的 l 和 r 框定了当前处理的子树中节点值的范围。由于输入是 1 到 n 的一个排列,因此节点在当前考察的子树当且仅当其值在 l 和 r 确定的范围之内。从代码也能看出,遍历中不在范围的点不会被处理。另外由于按照输入的顺序向空树插入值,输入序列中最先出现的属于当前子树的节点一定是该子树的根,因此根据其值确定已经找到还是选定新的子树,即调整 l 和 r 的值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-7-16 19:20:31 | 显示全部楼层
dolly_yos2 发表于 2022-7-16 18:53
这里的 l 和 r 框定了当前处理的子树中节点值的范围。由于输入是 1 到 n 的一个排列,因此节点在当前考察的 ...

懂了 , 谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-16 21:53:46 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-17 09:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表