太棒了;转到我的问题
我相信这里提出的问题一定不是什么新问题,但我没有找到任何直接对应的讨论。
假设我有以下函数(为了提供具有相同结构属性的实际函数的确定性替代,类型为'a -> 'a seq):
// I'm a function that looks suspiciously like a tree
let lsExample x =
match x with
| 0 -> seq { 1; 6; 7 }
| 1 -> seq { 2; 3 }
| 3 -> seq { 4; 5 }
| 7 -> seq { 8; 9 }
| _ -> Seq.empty
Run Code Online (Sandbox Code Playgroud)
现在,我希望拥有以下内容:
let lsAll: ('a -> 'a seq) -> 'a -> 'a seq
Run Code Online (Sandbox Code Playgroud)
这样
lsAll lsExample 0
Run Code Online (Sandbox Code Playgroud)
评估为 …
f# functional-programming tail-recursion depth-first-search preorder
我希望这是一个可以接受的问题.我理解递归的思维模式,我想要考虑基本情况然后是递归情况,但是考虑到一些比较困难的BST问题,我只是画空白而感觉就像我迷失了,没有一个好的方向.
以链接列表为例,似乎有一种模式可以解决问题,但BT似乎要么你知道也要不知道.任何提示/指针?我似乎已经解决的唯一概念是,如果我正在处理空节点并且我想对它们或它们做一些事情,我将把它作为一个案例
if(root == null)
//do something
Run Code Online (Sandbox Code Playgroud)
或者如果我没有与null节点有任何关系,那么我使用倒置的基本情况
if(root != null)
//do stuff
else
//do nothing for null case
Run Code Online (Sandbox Code Playgroud)
但即便如此,我还是会对下一步感到茫然.我想这是一个我遇到的问题的例子,不知道如何接近.我不一定在寻找答案,只是处理这类问题的潜在策略(以及常规的二叉树问题).
编写一个方法numberNodes来更改存储在二叉树中的数据,为每个节点分配以1开头的顺序整数,以便预先遍序遍历将按顺序生成数字(1,2,3等).例如,给定左下方树引用的树,调用tree.numberNodes();将覆盖现有数据,将节点值从1分配给6,以便生成树的预先遍历1, 2, 3, 4, 5, 6.
你不要改变树的结构.您只是更改存储在数据字段中的值.您的方法应返回树中有多少节点的计数.
假设您要将此方法添加到IntTree类中,如下所示:
public class IntTree {
private IntTreeNode overallRoot;
...
}
Run Code Online (Sandbox Code Playgroud)
在盯着代码之后,我想我应该用我int count的方法来确定我是否前往左根或右根,因为它是一个二叉搜索树但是我仍然无法实现这个功能......啊编码块!
我想使用 C 将二叉树转换为数组。我尝试过但没有成功。
我的二叉树包含以下元素(预购)
4 3 5 10 8 7
Run Code Online (Sandbox Code Playgroud)
但我的数组包含(排序后)
4 4 5 7 8 10
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。我当前的代码如下所示:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct tree
{
int data;
struct tree *left;
struct tree *right;
}tree;
int AddToArray(tree *node, int arr[], int i);
tree *CreateNode(int data);
tree *Insert(tree *node, int data);
void PrintPreorder(tree *node);
int count(tree *node);
int compare(const void * a, const void * b);
//---------------------------------------------------------------------------
int main()
{
int i;
int size;
int *arr=NULL;
tree *root=NULL;
printf("***TEST …Run Code Online (Sandbox Code Playgroud) var preorderTraversal = function(root) {
var array = [];
if(!(root == null)){
array.push(root.val) ;
preorderTraversal(root.left);
preorderTraversal(root.right);
}
return array;
};
Run Code Online (Sandbox Code Playgroud)
当测试用例为[1,2]时,代码测试失败,我只输出[1],如何解决?
有没有办法打印MST给出的输出的预先遍历(使用Kruskal或Prim的算法).我有一个混乱,因为输出可能总是或不是二叉树.那么,这里的预订遍历是如何实现的呢?普通的DFS可以完成任务吗?
当被要求创建一个给定前序遍历的BST时,会给出如下答案:http://www.geeksforgeeks.org/construct-bst-from-given-preorder-traversa/
这需要很多代码.
我的问题是,为什么我不能插入空树给我正确的答案?有没有简单插入可能导致错误答案的例子?例如,在该链接中给出的示例中,我们将{10,5,1,7,40,50}作为前序遍历.但是,不只是按预定顺序列表的顺序使用常规BST插入方法6次给出适当的树?我可以得到一个反例和/或解释为什么我不正确吗?我一直无法想出一个反例.