Haskell范围内二叉树的子树
我有一个二叉树,定义如下:Haskell范围内二叉树的子树,haskell,recursion,tree,Haskell,Recursion,Tree,我有一个二叉树,定义如下: data BSTree = Void | BSNode BSTree Integer BSTree 我想写一个函数 subTree:: Integer -> Integer -> BSTree -> BSTree 它返回具有整数->bTree->bTree的所有树子集 子树a b Void=Void 子树a b(BSNode leftTree键rightTree) |key
data BSTree = Void | BSNode BSTree Integer BSTree
我想写一个函数
subTree:: Integer -> Integer -> BSTree -> BSTree
它返回具有整数->bTree->bTree的所有树子集
子树a b Void=Void
子树a b(BSNode leftTree键rightTree)
|key
但是没有得到正确的输出。有人能指出我的逻辑中的缺陷吗?我在递归的每个步骤中,都应该提供
a
和b
参数:
data BSTree = Void | BSNode BSTree Integer BSTree deriving Show
subTree:: Integer -> Integer -> BSTree -> BSTree
subTree a b Void = Void
subTree a b (BSNode leftTree key rightTree)
| key < a = --your logic here
| b < key = -- your logic here
| a <= key && b > key = BSNode (subTree a b leftTree) key (subTree a b rightTree)
t1 = BSNode Void 5 Void
t2 = BSNode Void 6 Void
t3 = BSNode Void 7 Void
t4 = BSNode t1 8 (BSNode t1 7 t2)
提示:如果
键
,仍然返回包含键的BSNode
。b
也一样。这和树的高度有什么关系?抱歉,标题上的大脑会褪色@WillemVanOnsem这是真的,但我不确定我应该用什么来代替它。@AdityaSubramanian:你在正确的子树上递归,而没有在那个层次上构造节点。当然好了!非常感谢。
data BSTree = Void | BSNode BSTree Integer BSTree deriving Show
subTree:: Integer -> Integer -> BSTree -> BSTree
subTree a b Void = Void
subTree a b (BSNode leftTree key rightTree)
| key < a = --your logic here
| b < key = -- your logic here
| a <= key && b > key = BSNode (subTree a b leftTree) key (subTree a b rightTree)
t1 = BSNode Void 5 Void
t2 = BSNode Void 6 Void
t3 = BSNode Void 7 Void
t4 = BSNode t1 8 (BSNode t1 7 t2)
subTree 6 10 t4
=> BSNode Void 8 (BSNode Void 7 (BSNode Void 6 Void))