利用Lua实现二叉查找树并进行各种遍历
来源:互联网 发布:php商城视频教程 编辑:程序博客网 时间:2024/06/16 19:42
-- author : coder_zhang-- date : 2014-6-25root = nilfunction 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 endendfunction 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 pendfunction 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 = nilendfunction pre_order(p) if p ~= nil then print (p.value) pre_order(p.left) pre_order(p.right) endendfunction in_order(p) if p ~= nil then in_order(p.left) print (p.value) in_order(p.right) endendfunction post_order(p) if p ~= nil then post_order(p.left) post_order(p.right) print (p.value) endendfunction pre_order_no_rec(p) stack = {} while p ~= nil or #stack ~= 0 do if p == nil then p = stack[#stack] stack[#stack] = nil end print (p.value) if p.right ~= nil then stack[#stack + 1] = p.right end p = p.left endendfunction in_order_no_rec(p) stack = {} while p ~= nil or #stack ~= 0 do if p == nil then p = stack[#stack] stack[#stack] = nil print (p.value) p = p.right else stack[#stack + 1] = p p = p.left end endendfunction post_order_no_rec(p) stack = {} while p ~= nil do stack[#stack + 1] = {node = p, status = 0} p = p.left end while #stack ~= 0 do p = stack[#stack] if p.node.right == nil or p.status == 1 then print (p.node.value) stack[#stack] = nil else p = p.node.right stack[#stack].status = 1 while p ~= nil do stack[#stack + 1] = {node = p, status = 0} p = p.left end end endendarray = {5, 3, 2, 4, 7, 6, 8}i = 1while i <= #array do insert_node(array[i]) i = i + 1endprint ("--------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(3)pre_order(root)
0 0
- 利用Lua实现二叉查找树并进行各种遍历
- 利用栈对二叉树进行遍历
- 二叉树(一)利用数组初始化二叉树,并实现前序中序后序遍历
- 遍历二叉树的各种实现
- 实现二叉树各种遍历算法
- 二叉树各种遍历方式实现
- C实现二叉树的各种遍历
- 二叉树利用队列实现层次遍历
- 二叉树各种遍历
- 二叉树各种遍历
- 二叉树各种遍历
- 构建二叉树并实现递归遍历
- java实现并遍历二叉树
- 查找--遍历二叉树
- 遍历二叉查找树
- java实现二叉查找树(插入、删除、遍历、查找)
- 利用队列进行二叉树的层次遍历
- 二叉查找树的各种操作(插入、删除、查找、遍历)
- 如何创建一个Service
- CentOS下编译Lua使得其支持动态链接
- CentOS安装Prolog和Erlang语言
- Linux系统下加载U盘设备时文件乱码的有效解决方法
- RabbitMq在ubuntu的安装
- 利用Lua实现二叉查找树并进行各种遍历
- 我做自媒体的思维
- Linux终端下简单的登录程序 密码不回显
- Python文件夹与文件的操作实现代码
- 已知后序遍历和中序遍历求解前序遍历
- 关于ssh2上传文件带进度遇到问题
- CentOS删除Applications中的菜单项
- 在RowCommand事件中获取索引值示例代码
- CodeStatistics