-- 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. python学习笔记(6)关键字与循环控制

    一.变量和类型 1.基本变量类型 (1)整数 (2)浮点数 (3)字符串 (4)布尔值 (5)空值 (6)函数 (7)模块 (8)类型 (9)自定义类型 print(type()) print(typ ...

  2. JVM内存模型及参数调优

    堆.栈.方法区概念区别 1.堆 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.根据垃圾回收机制的不同, Java堆有可能拥有不同的结构,最为常见的就是 ...

  3. Python之路-面向对象&继承和多态&类属性和实例属性&类方法和静态方法

    一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强…” 什么是面 ...

  4. map集合中取出分类优先级最高的类别名称

    import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Map ...

  5. 在a标签中使用了onclick修改样式之后a:hover失效

    是因为优先级的原因造成,使用!important修改优先级. 如修改成: .button1:hover {            color: #FFF !important;            ...

  6. [译]理解 SwiftUI 里的属性装饰器@State, @Binding, @ObservedObject, @EnvironmentObject

    原文地址:https://mecid.github.io/2019/06/12/understanding-property-wrappers-in-swiftui/ @States 通过使用 @St ...

  7. CCF CSP/CCSP报名费优惠的方法以及常见疑问

    目录 1. 本文地址 2. 认证作用 2.1. 高校认可 2.2. 赛事认可 2.3. 企业认可 3. 报名费价格及获取优惠的方法 3.1. CCF CSP 3.2. CCF CCSP 4. 语言与I ...

  8. Mysqldump导入数据库很慢的解决办法

    https://blog.csdn.net/xizaihui/article/details/53103049 1.MySQLdump导出的SQL语句在导入到其他数据库的时候会相当慢,甚至几十秒才处理 ...

  9. No module named flask 导包失败,Python3重新安装Flask模块

    在部署环境过程中,通过pip install -r requirements.txt安装包,结果启动项目时总是报错,显示没有flask模块,通过pip install flask还是不行,于是下载fl ...

  10. Dubbo 在跨语言和协议穿透性方向的探索:支持 HTTP/2 gRPC

    Dubbo 在跨语言和协议穿透性方向上的探索:支持 HTTP/2 gRPC 和 Protobuf 本文整理自刘军在 Dubbo 成都 meetup 上分享的<Dubbo 在多语言和协议穿透性方向 ...