首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将红黑树转换为AVL树算法

将红黑树转换为AVL树算法
EN

Stack Overflow用户
提问于 2015-03-01 20:24:47
回答 1查看 298关注 0票数 0

我需要写一个接收红黑树并将其转换为AVL树的算法。不一定要是完美的代码,伪代码也可以。甚至是帮助我入门的主要想法。不知道怎么开始,请帮帮忙。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-03-01 23:23:13

你有一棵红黑相间的树:

代码语言:javascript
复制
data Color = Black | Red
data RB a = NodeRB !Color (RB a) a (RB a) | TipRB

instance Foldable RB where
  foldMap _ TipRB = mempty
  foldMap f (NodeRB _ l v r) =
    foldMap f l <> f v <> foldMap f r

这为我们提供了lengthtoList

你想要一个AVL树:

代码语言:javascript
复制
data AVL a = NodeAVL Int (AVL a) a (AVL a) | TipAVL

fromListAVL :: Int -> Int -> [a] -> (AVL a, [a])
fromListAVL _ 0 xs = (TipAVL, xs)
fromListAVL _ _ [] = (TipAVL, [])
fromListAVL _ 1 (x:_) = NodeAVL 1 TipAVL x TipAVL
fromListAVL d xs = case fromListAVL (d-1) (n `quot` 2) xs of
  (NodeAVL _ l v r,[]) -> NodeAVL d l v r
  (t,(x:xs)) = NodeAVL d n t x $
                fst (fromListAVL (d-1) (n-n `quot` 2-1)) xs

rbToAVL :: RB a -> AVL a
rbToAVL rb = fromListAVL depth lrb (toList rb)
   where lrb = length rb
         depth = calculateDepth lrb -- write this!
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28793497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档