Functional programming 函数式编程二叉搜索树作业
因此,我必须为二叉树编写一个插入函数,使其成为二叉搜索树,但我遇到了一些麻烦。一切都是函数,所以我知道没有状态的概念。因此,在插入时,我需要反复递归地创建树。我很难接受这个想法Functional programming 函数式编程二叉搜索树作业,functional-programming,context-free-language,Functional Programming,Context Free Language,因此,我必须为二叉树编写一个插入函数,使其成为二叉搜索树,但我遇到了一些麻烦。一切都是函数,所以我知道没有状态的概念。因此,在插入时,我需要反复递归地创建树。我很难接受这个想法 treenode -> procedure(val, left, right) procedure(some) if some then -(some, 1) then right else left else val 这允许我创建节点并访问值、左子树和右子树(0表示空树): 要创建更复杂的树,我可以执行以下操作
treenode -> procedure(val, left, right) procedure(some) if some then -(some, 1) then right else left else val
这允许我创建节点并访问值、左子树和右子树(0表示空树):
要创建更复杂的树,我可以执行以下操作:
.treenode(4, .treenode(3, 0, 0), .treenode(6, .treenode(2, 0, 0), 0))
我甚至可以在一棵空树上插入:
.treenode(4, 0, 0)
insert -> procedure(root, value) if empty(root) then .treenode(value, 0, 0) else insert_recursive(root, .treenode(value, 0, 0)
这就是我无法理解如何插入到这样的树中的地方。这种语言中没有状态的概念,因此我需要以某种方式递归地将新节点的值附加到当前树上。如果有人能给我一个提示,我将非常感激。我应该这样称呼它:
tree = empty
tree = insert(tree, 4)
tree = insert(tree, 6)
....
and so on
我以前从未见过这种语法,所以如果我把一些语法弄错了,请耐心听我说。希望代码能说明需要做什么-
insert -> procedure(root, value)
if empty(root) then #1
.treenode(value, 0, 0)
else if value < root.value #2
.treenode (root.value, insert(root.left, value), root.right)
else if value > root.value #3
.treenode (root.value, root.left, insert(root.right, value))
else #4
root
insert->procedure(根,值)
如果为空(根),则#1
.treenode(值,0,0)
如果值root.value#3,则为else
.treenode(root.value,root.left,插入(root.right,value))
其他#4
根
StackOverflow允许我们直接在应答帖子中运行JavaScript片段。这里有一个功能片段,可以让您看到这个概念的实际应用-
常量为空=
{}
常量树节点=(值,左=空,右=空)=>
({值,左,右})
常量插入=(t,值)=>
t==空
? treenode(值,空,空)
:值t值
? 树节点(t值,t左,插入(t右,值))
:t
常量print=(t,pre='',child='')=>
t==空
? 前+'∅\不
:打印
(t.对
,child+'┌── '
,child+“。”
)
+前置+字符串(t.value)+'\n'
+印刷品
(t.左
,child+'└── '
,child+“。”
)
让树=空
树=插入(树,4)
树=插入(树,6)
树=插入(树,9)
树=插入(树,3)
树=插入(树,5)
树=插入(树,1)
console.log(print(tree))
一旦您了解了需要执行的操作,请使用您的过程的有效语法编辑此答案。如果您还有其他问题,请告诉我。您所说的有道理,但我认为它行不通。我需要返回一个添加了新节点的整个树的副本,所以当我试图从树中获取信息时,我也在递归地再次构建它。在您给我的基本情况下,它只返回一个带有新值的treenode,但是我需要将整个树与新值一起返回node@SomeGuy我已经包含了一个功能代码片段,以演示insert确实返回整个树,而不仅仅是新插入的节点。这是什么语言?还有,这个问题和CFLs有什么关系?@Bergi这是我们在课堂上创建的一种语言