-- author : coder_zhang
-- date : 2014-6-25 root = nil function insert_node(number)
if root == nil then
root = {value = number, left = nil, right = nil, parent = nil}
else
q = root
r = nil
while q ~= nil do
r = q
if q.value > number then
q = q.left
elseif q.value < number then
q = q.right
else
return
end
end
if r.value > number then
r.left = {value = number, left = nil, right = nil, parent = r}
else
r.right = {value = number, left = nil, right = nil, parent = r}
end
end
end function find_node(p, number)
while p ~= nil do
if p.value == number then
return p
elseif p.value > number then
p = p.left
else
p = p.right
end
end
return p
end function delete_node(number)
p = find_node(root, number)
if p == nil then
print ("can\'t find " .. number)
return
end
real_del = nil
if p.left == nil or p.right == nil then
real_del = p
else
q = p.right
r = nil
while q ~= nil do
r = q
q = q.left
end
real_del = r
end
child = nil
if real_del.left ~= nil then
child = real_del.left
else
child = real_del.right
end
if child ~= nil then
child.parent = real_del.parent
end
if real_del.parent == nil then
root = child
else
if real_del.parent.left == real_del then
real_del.parent.left = child
else
real_del.parent.right = child
end
end
if real_del ~= p then
p.value = real_del.value
end
real_del = nil
end function pre_order(p)
if p ~= nil then
print (p.value)
pre_order(p.left)
pre_order(p.right)
end
end function in_order(p)
if p ~= nil then
in_order(p.left)
print (p.value)
in_order(p.right)
end
end function post_order(p)
if p ~= nil then
post_order(p.left)
post_order(p.right)
print (p.value)
end
end function pre_order_no_rec(p)
stack = {}
while p ~= nil or #stack ~= do
if p == nil then
p = stack[#stack]
stack[#stack] = nil
end
print (p.value)
if p.right ~= nil then
stack[#stack + ] = p.right
end
p = p.left
end
end function in_order_no_rec(p)
stack = {}
while p ~= nil or #stack ~= do
if p == nil then
p = stack[#stack]
stack[#stack] = nil
print (p.value)
p = p.right
else
stack[#stack + ] = p
p = p.left
end
end
end function post_order_no_rec(p)
stack = {}
while p ~= nil do
stack[#stack + ] = {node = p, status = }
p = p.left
end
while #stack ~= do
p = stack[#stack]
if p.node.right == nil or p.status == then
print (p.node.value)
stack[#stack] = nil
else
p = p.node.right
stack[#stack].status =
while p ~= nil do
stack[#stack + ] = {node = p, status = }
p = p.left
end
end
end
end array = {, , , , , , } i = while i <= #array do
insert_node(array[i])
i = i +
end print ("--------pre order---------")
pre_order(root)
print ("--------------------------") print ("-------in order-----------")
in_order(root)
print("---------------------------") print ("-------post order---------")
post_order(root)
print ("--------------------------") print ("-----pre order no rec-----")
pre_order_no_rec(root)
print ("--------------------------") print ("-----in order no rec------")
in_order_no_rec(root)
print ("--------------------------") print ("---post order no rec------")
post_order_no_rec(root)
print ("--------------------------") delete_node() pre_order(root)

利用Lua实现二叉查找树并进行各种遍历的更多相关文章

  1. PAT-1135 Is It A Red-Black Tree(二叉查找树的创建和遍历)

    There is a kind of balanced binary search tree named red-black tree in the data structure. It has th ...

  2. 利用foreach对页面控件的遍历 及三目运算符的使用

    1.利用foreach对页面控件的遍历 及三目运算符的使用 利用div将一组CheckBox放在一起用于遍历 <body> <form id="form1" ru ...

  3. 利用 Lua 实现 App 动态化方案

    因为动态化的东西我第一次看实现方案的源码,而且目前还是大三的学生,缺少很多实践经验说错的地方还请原谅,也希望能指出,被告知.想了很久还是决定写出来,求大神勿喷. 并且我的一个朋友bestswifter ...

  4. Nginx利用lua剪辑FastDFS图片

    Nginx利用lua剪辑FastDFS中的图片 我们经常用FastDFS来做图片服务器,通过nginx来上传或者获取图片.本文要实现的功能是,当客户端要获取不同尺寸的图片是,lua根据url中的尺寸大 ...

  5. CentOS6.4 安装OpenResty和Redis 并在Nginx中利用lua简单读取Redis数据

    1.下载OpenResty和Redis OpenResty下载地址:wget http://openresty.org/download/ngx_openresty-1.4.3.6.tar.gz Re ...

  6. PHP利用lua实现Redis Sorted set的zPop操作

    function zPop($key) { $script = <<<EOD local v = redis.call('zrange', KEYS[1], 0, 0); if v[ ...

  7. 利用Lua读写本地文件

    缘由 今天在使用Lua编写脚本时,需要用到读写文件的操作,很久没有使用Lua了,特写下此文来备忘一下. 简介 Lua对文件的操作与C对文件的操作基本一致,不管是参数还是方法.Lua中可以直接通过全局方 ...

  8. JavaScript利用数组原型,添加方法实现遍历多维数组每一个元素

    原型就是提供给我们为了让我们扩展更多功能的. 今天学习了用js模拟底层代码,实现数组多维的遍历.思想是在数组原型上添加一个方法. // js中的数组forEach方法,传入回掉函数 能够帮助我们遍历数 ...

  9. Nginx 中利用 Lua 脚本做访问控制

    使用场景 需要在后端服务之前做访问控制,或没有后端服务的场景,如静态文件. 实验环境 Ubuntu 14.04 Nginx 1.4.6 安装 Lua 运行环境 sudo apt-get install ...

随机推荐

  1. win32 socket编程(二)——TCP/IP

    一.大端.小端法定义 1.1小端法(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端. (主机字节顺序) 1.2 大端法(Big-Endian ...

  2. 表格类型数据,Excel csv导入,导出操作

    import pandas # 创建表格格式# ad = pandas.DataFrame({"a": range(1, 10), "b": range(10, ...

  3. SQLServer死锁查询

    --查询死锁 select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName from sys ...

  4. 06.Linux-RedHat系统本地yum源配置

    RedHat系统 1.挂载镜像光盘[root@localhost ~]# mount /dev/sr0 /media/cdrom/ 2.创建本地yum源仓库[root@localhost ~]# cd ...

  5. 6-基于TMS320C6678、FPGA XC5VSX95T的6U CPCI 8路光纤信号处理卡

    基于TMS320C6678.FPGA XC5VSX95T的6U CPCI 8路光纤信号处理卡 1.板卡概述  本板卡由我公司自主研发,基于CPCI架构,符合CPCI2.0标准,采用两片TI DSP T ...

  6. 记一次在mac上源码编译curl,使其支持NSS的过程

    一.背景 在一次学习https原理的过程中,希望客户端指定特定的cipher suites来抓包分析SSL/TLS的握手过程,就想到了使用curl工具,而不是使用浏览器. 接下来使用man curl找 ...

  7. 【转】一文搞懂C语言回调函数

    转:https://segmentfault.com/a/1190000008293902?utm_source=tag-newest 什么是回调函数 我们先来看看百度百科是如何定义回调函数的: 回调 ...

  8. python常用函数 Z

    zip(iterable, iterable..) 数据打包和解包,一般结果是一个元组(最短匹配). 例子:

  9. wc 统计文件的行数

    1.命令功能 wc 统计文件的行数,单词和字节数 2.语法格式 wc  option  file wc  option  --files0-from=F 参数说明 参数 参数说明 -c 统计字节数 - ...

  10. python封装成exe

                                版权声明:本文为博主原创文章,未经博主允许不得转载.     https://blog.csdn.net/qq_32113189/article ...