平衡二叉树的简单建立--示例

来源:互联网 发布:java判断字符等于空格 编辑:程序博客网 时间:2024/06/02 01:48
<pre name="code" class="plain">PG.lua文件  -- 这个用来输出处理 打log
PG = {}function  PG.Log(str)print(str);end


首先是pinghengtree.lua文件   数据结构定义在这里 
require "PG";_M = {}; rawset(_M,"pinghengtree",{}); local  pinghengtree = rawget(_M,"pinghengtree");-- pinghengtree = {};pinghengtree.tree = {};local tree = pinghengtree.tree;function  tree: new(lefttree,righttree,data)local  o = {};o.data = data;o.lefttree = lefttree;o.righttree = righttree;setmetatable(o,self);self.__index = self;return o;endfunction tree:AddChild(direction,data)PG.Log(direction);if direction == "left" thenPG.Log(" exe this?")if self.lefttree == nil thenPG.Log("self's leftnode is nil  ")self.lefttree = self:new(nil,nil,data);elseself.lefttree.data = data;endelseif direction == "right" thenif self.righttree == nil thenself.righttree = self:new(nil,nil,data);PG.Log("self's rightnode is nil ")elseself.righttree.data = data;endendendfunction pinghengtree.FindRoot(rt,data)if rt == nil thenreturn nil;endif  rt.data == data thenreturn rt;elselocal t = nill;t = pinghengtree.FindRoot(rt.lefttree,data)if t ~= nil thenreturn t;endt = pinghengtree.FindRoot(rt.righttree,data)if t ~= nil thenreturn t;endreturn nil;endendfunction  pinghengtree.CreateNode(rt,data)if rt.data < data thenif rt.righttree ~= nil thenreturn pinghengtree.CreateNode(rt.righttree,data);elselocal tree = pinghengtree.Class();rt.righttree= tree:new(nil,nil,data);return rt.righttree;endendif rt.data == data thenreturn rt;endif rt.data > data thenif rt.lefttree ~= nil thenreturn pinghengtree.CreateNode(rt.lefttree,data);elselocal tree = pinghengtree.Class();rt.lefttree = tree:new(nil,nil,data);return rt.lefttree;endendendlocal datali= {1,3,5,7,2,4,6,8,9,10};function  pinghengtree.Class()return tree;endfunction  pinghengtree.PrintTree(rt)if rt ~= nil thenPG.Log(rt.data);endif rt.lefttree~= nil thenpinghengtree.PrintTree(rt.lefttree);endif rt.righttree~= nil thenpinghengtree.PrintTree(rt.righttree);endendfunction pinghengtree.CreateTree(rt,datalist) -- dt is  data list  for i = 2,#datalist dopinghengtree.CreateNode(rt,datalist[i]);endend-- pinghengtree.Test = function( )-- print("tet");-- endfunction pinghengtree.Test()print("tet");end
最后是main.lua文件<pre name="code" class="plain">local datalist = {1,3,5,7,2,4,6,8,9,10};local tree = treeRoot:new(nil,nil,datalist[1]);pinghengtree.CreateTree(tree,datalist);for i = 1,10 dolocal newRoot = pinghengtree.FindRoot(tree,i);PG.Log(newRoot.data);end
pinghengtree.PrintTree(tree); 
--后续会加入新的内容 为什么用lua来实现 lua简单啊 不像c++ 内存处理 指针 繁杂的语法就是大大的障碍 还是脚本比较容易表达思想 改成c++也容易


0 0
原创粉丝点击