用LUA刷PTA ——1020 Tree Traversals

踩的坑

我仿佛上次碰树都是上个世纪的事情了

前序遍历 preorder traversal sequences 根左右
中序遍历 inorder traversal sequences 左根右
后序遍历 postorder traversal sequences 左右根

其实并不需要算出整棵树,只要按顺序输出每个子树的根节点就行了

代码

--IO
local IORead = io.read('*a'):gmatch('%w+')

function readNumber()
    return tonumber(IORead())
end

-- para

local Ptree = {} Itree = {} N = readNumber()
local Ltree = {}
local trees = {}
    --{Ptree = {}, Itree = {}}

-- logic

function updateTrees()
    local tree = table.remove(trees, 1)
    local ptree = tree.Ptree itree = tree.Itree
    
    if #ptree <= 0 then
        return
    end
    
    table.insert(Ltree, ptree[#ptree])
    
    local subtree1 = {Ptree = {}, Itree = {}}
    local subtree2 = {Ptree = {}, Itree = {}}
    local subtree = subtree1
    for index = 1, #ptree do
        if itree[index] == ptree[#ptree] then
            subtree = subtree2
            table.insert(ptree, index, -1) --占位符
        else
            table.insert(subtree.Ptree, ptree[index])
            table.insert(subtree.Itree, itree[index])
        end
    end
    table.insert(trees, subtree1)
    table.insert(trees, subtree2)
end

function tableToString(t)
    local s = ""
    for _, v in pairs(t) do
        s = s .. tostring(v) .. " "
    end
    return string.sub(s, 1, #s-1)
end

-- main

for _ = 1, N do
    table.insert(Ptree, readNumber())
end

for _ = 1, N do
    table.insert(Itree, readNumber())
end

table.insert(trees, {Ptree = Ptree, Itree = Itree})

while #trees > 0 do
    updateTrees()
end

print(tableToString(Ltree))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值