标签: preorder

F# - 遍历不是定义为结构而是定义为函数的树: ls: 'a -> 'a seq

太棒了;转到我的问题

我相信这里提出的问题一定不是什么新问题,但我没有找到任何直接对应的讨论。

假设我有以下函数(为了提供具有相同结构属性的实际函数的确定性替代,类型为'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

3
推荐指数
1
解决办法
151
查看次数

是否有解决二叉树问题的"策略"?

我希望这是一个可以接受的问题.我理解递归的思维模式,我想要考虑基本情况然后是递归情况,但是考虑到一些比较困难的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的方法来确定我是否前往左根或右根,因为它是一个二叉搜索树但是我仍然无法实现这个功能......啊编码块!

java binary-tree preorder

2
推荐指数
1
解决办法
2542
查看次数

在c中将二叉树转换为数组

我想使用 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)

c arrays tree binary-tree preorder

2
推荐指数
1
解决办法
3万
查看次数

使用javascript编写预序遍历

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],如何解决?

javascript algorithm preorder

2
推荐指数
2
解决办法
2642
查看次数

预订遍历最小生成树

有没有办法打印MST给出的输出的预先遍历(使用Kruskal或Prim的算法).我有一个混乱,因为输出可能总是或不是二叉树.那么,这里的预订遍历是如何实现的呢?普通的DFS可以完成任务吗?

algorithm tree minimum-spanning-tree preorder

2
推荐指数
1
解决办法
1423
查看次数

我对preorder遍历的看法有什么问题

当被要求创建一个给定前序遍历的BST时,会给出如下答案:http://www.geeksforgeeks.org/construct-bst-from-given-preorder-traversa/

这需要很多代码.

我的问题是,为什么我不能插入空树给我正确的答案?有没有简单插入可能导致错误答案的例子?例如,在该链接中给出的示例中,我们将{10,5,1,7,40,50}作为前序遍历.但是,不只是按预定顺序列表的顺序使用常规BST插入方法6次给出适当的树?我可以得到一个反例和/或解释为什么我不正确吗?我一直无法想出一个反例.

algorithm binary-search-tree preorder

0
推荐指数
1
解决办法
75
查看次数