找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2924|回复: 11

[选择集] 二叉树查找函数

[复制链接]

已领礼包: 8121个

财富等级: 富甲天下

发表于 2013-6-9 23:28:03 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::DataSTRU:BTreeFind
调用格式: ( XD::DataSTRU:BTreeFind key tree n)
参数说明: key ---- 关键字
tree --- 二叉树
n --- 范围
返回值: 如果找到,返回找到的Key的位置
函数简介: 二叉树查找函数
函数来源: 原创
函数作者: Highflybird
适用版本: 不限 
最后更新时间: 2013-06-09
备注: -
演示图片: -

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 Highflybird 于 2013-6-9 23:29 编辑

  1. ;;;=============================================================
  2. ;;;用AutoLISP从二叉树中查找一个元素(Search a key in binary tree)
  3. ;;;每次查找总是从中间开始,如果不是,大于中间的就查找右边,小于
  4. ;;;中间则查找左边,直到原子或者点对表。                        
  5. ;;;因为树的最大深度不超过log(n),故单次查找的时间为O(n)<=log(n)
  6. ;;;-------------------------------------------------------------
  7. ;;;输入: 要查找的Key,已经构建好的二叉查找树,n查询的最大节点数
  8. ;;;输出: 如果找到,返回找到的Key的位置。否则返回nil            
  9. ;;;Author:Highflybird              in Shenzhen,China,2012-06-15
  10. ;;;=============================================================
  11. (defun XD::DataSTRU:BTreeFind (key Tree n / L R i)
  12.   (if (atom Tree)                                               ;if it's an atom,
  13.     (if (= key Tree) 0)                                         ;set the index as 0
  14.     (if (= (setq L (car Tree)) key)                             ;if left node = key
  15.       (/ n 2)                                                   ;the index is the middle number.
  16.       (if (atom (setq R (cdr Tree)))                            ;if the right node is an atom
  17.         (if (= R key) 0)                                        ;and right node = key, set the index as 0
  18.         (if (> L key)                                           ;if left node > key
  19.           (XD::DataSTRU:BTreeFind key (car R) (/ n 2))                           ;recurse Left
  20.           (if (setq i (XD::DataSTRU:BTreeFind key (cdr R) (/ (1- n) 2)))         ;otherwise recurse right
  21.             (1+ (+ (/ n 2) i))                                  ;must add the index
  22.           )
  23.         )
  24.       )
  25.     )
  26.   )
  27. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2013-6-10 22:56:51 来自手机 | 显示全部楼层
函数很好也能学到知识,楼主能给个具体应用例子吗,来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2013-6-10 23:06:01 | 显示全部楼层
此函数是为了缩短查找时间吗?

点评

二叉树算法,对于排序查找是个很重要的算法,极大提高排序查找速度。 构建二叉树的函数见另外的帖子发布的 XD:ataStru:BTree 函数。  详情 回复 发表于 2013-6-11 12:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3256个

财富等级: 富可敌国

发表于 2013-6-11 11:18:46 | 显示全部楼层
能说一下 能这个的用途吗?是不是缩短程序运行时间呀
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8121个

财富等级: 富甲天下

 楼主| 发表于 2013-6-11 12:17:14 | 显示全部楼层
sicky111 发表于 2013-6-10 23:06
此函数是为了缩短查找时间吗?

二叉树算法,对于排序查找是个很重要的算法,极大提高排序查找速度。

构建二叉树的函数见另外的帖子发布的 XD::DataStru:BTree 函数。

点评

G版,能给个 XD:ataStru:BTree 函数的链接么  详情 回复 发表于 2013-6-11 15:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-11 15:04:25 | 显示全部楼层
Highflybird 发表于 2013-6-11 12:17
二叉树算法,对于排序查找是个很重要的算法,极大提高排序查找速度。

构建二叉树的函数见另外的帖子发 ...

G版,能给个 XD::DataStru:BTree 函数的链接么

点评

呵呵,我自罚,在Highflybird版主原创前错呼G版。笔误,笔误。谢谢兄弟们指正。也请Highflybird版主 见谅。  详情 回复 发表于 2013-6-11 19:19
这位兄弟该批评,人没看清楚,乱叫一通。呵呵。  发表于 2013-6-11 17:42
你这是喊 高飞鸟 版主 还是喊 Gu_xl 版主?  发表于 2013-6-11 15:35
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-11 19:19:19 | 显示全部楼层
本帖最后由 GTJ116600 于 2013-6-11 19:24 编辑
GTJ116600 发表于 2013-6-11 15:04
G版,能给个 XD:ataStru:BTree 函数的链接么


呵呵,我自罚,在Highflybird版主原创前错呼G版。笔误,笔误。谢谢兄弟们指正。也请Highflybird版主
见谅。sicky111兄弟,你说话可真够犀利的,够狠{:soso_e113:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2013-6-18 07:03:13 | 显示全部楼层
二叉树?第一次听说呀!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-25 15:54 , Processed in 0.479509 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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