Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell范围内二叉树的子树_Haskell_Recursion_Tree - Fatal编程技术网

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))