标签: binary-tree

在深度优先搜索期间检测家谱图中的循环

我递归地加载马谱系数据.对于一些错误的数据集,我的递归永远不会停止......这是因为数据中有循环.

如何检测这些循环以停止重复?

我想到的是反复出现维持所有"访问过的"马匹的哈希表.但这会发现一些误报,因为一匹马可以在树上两次.

不可能发生的事情是,一匹马看起来像是父亲或祖父或自己的祖父.

.net algorithm binary-tree genealogy

6
推荐指数
1
解决办法
2594
查看次数

构造具有预先遍历遍历的树

给出一种特殊类型的树,其中所有树叶都标有标记,L其他树标记有N.每个节点可以有0个或最多2个节点.给出了树的前序遍历.

给出一个算法来从这个遍历构建树.

algorithm binary-tree

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

作为Java命令行输入的字符串列表(多行)

我正在尝试为学校做作业,我不知道如何处理输入.我在下面提供了一个关于作业背景的链接:

https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0B1DkmkmuB-leNDVmMDU0MDgtYmQzNC00OTdkLTgxMDEtZTkxZWQyYjM4OTI1&hl=en

我对如何完成任务所要求的一切有一个大概的想法,但我不确定如何处理输入.

示例输入是:

A0
0
A00
ab000

这给出了一个输出:

树1:
无效!
树2:
高度:-1
路径长度:0
完整:是
后序:
树3:
高度:0
路长度:0
完整:是
后序:一个
树4:
高度:1条
的路径长度:1个
完整:是
后序:BA

我打算用Java做这件事.我的问题是,如果没有在输入文件中输入管道,如何将样本中的多行输入输入Windows cmd.exe行?因为按Enter键只会使用一行输入来运行程序,而不是创建一个新行.此外,由于分配是自动标记的,输入不能是交互式的,那么我如何知道何时停止阅读?

谢谢.

java command-line binary-tree input

6
推荐指数
1
解决办法
6644
查看次数

用Java创建二进制树以用于遗传编程目的

我正在为一个正在进行的软件工程课程的项目工作.目标是设计一个程序,该程序将使用遗传编程生成适合所提供的训练数据的数学表达式.

我刚刚开始研究这个项目,我正试图围绕如何创建一个允许用户定义的树高度的二叉树,并保持每个节点分离,以便在我到达时使交叉和变异更简单实施这些过程.

这是我到目前为止创建的节点类.请原谅我确信我明显缺乏经验.

public class Node
{
    Node parent;
    Node leftchild;
    Node rightchild;

    public void setParent(Node p)
    {
        parent = p;
    }

    public void setLeftChild(Node lc)
    {
        lc.setParent(this);
        leftchild = lc;
    }

    public void setRightChild(Node rc)
    {
        rc.setParent(this);
        rightchild = rc;
    }   
}


public class OperatorNode extends Node
{
    char operator;


    public OperatorNode()
    {
        double probability = Math.random();

        if (probability <= .25)
        {
            operator = '+';
        }
        else if (probability > .25 && probability <= .50)
        {
            operator = '-'; …
Run Code Online (Sandbox Code Playgroud)

java binary-tree genetic-programming

6
推荐指数
1
解决办法
6379
查看次数

在O(log n)时间内从二叉树中获取随机数

是否有可能在O(log n)时间内从平衡二叉搜索树获得均匀分布的随机值(调用函数意味着它同样可能在树中获得任何值)?

我最初的想法是生成一个0,1或2的随机数.如果为0,则从当前节点取左路径,如果为1,则采用正确的路径,否则节点的值为随机值.如果您点击叶节点,请获取该节点的值.我不认为这会随机分发.

这是出于好奇,而不是针对特定的应用程序.

如果您需要任何澄清,请告诉我.

例如,如果你有树

     1
    / \
   2   5
       /
      3
Run Code Online (Sandbox Code Playgroud)

调用时,数字1,2,3和5将统一返回 int get_random_number()

澄清:所有其他正常的BST操作应保持为O(log n),如insert(),delete()等.

random algorithm binary-tree

6
推荐指数
1
解决办法
2602
查看次数

查找二叉树中父节点的位置

所以我需要帮助提出一个表达式,它总是会给我一个二进制树中子节点的父节点的位置.以下是我的老师将参加考试的问题示例:

"考虑一个包含10,000个节点的完整二叉树,使用从索引0开始的数组实现.通过从左到右一次从树中提取元素,按顺序填充数组.假设节点存储了其值在位置4999.该节点的父节点存储的值在哪里?"

我的老师没告诉我们如何解决这样的问题.她只是说"画一棵二叉树,找到一个模式." 我做到了这一点,但我无法想出任何东西!请帮忙.谢谢.

c++ tree binary-tree parent-child uncertainty

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

检查输入是否为有效的二叉树(使用联合查找)

给定以(A,B)形式的多个元组,其中A是二叉树中的父级,B是子级,请查找输入是否有效。提供了4个错误条件:

  1. 如果父母有两个以上的孩子,
  2. 如果输入了重复的元组,
  3. 如果树有周期,
  4. 如果可能有多个根。

如果违反多个有效条件,请按上述顺序打印条件。如果输入有效,则以串行表示形式打印树。例如:如果输入是(A,B),(B,C),(A,D),(C,E),则输出:(A(B(C(E())))(D))

我正在考虑通过联合查找数据结构来解决它,但无法对其进行编码。谁能帮助我了解c / c ++中的逻辑或伪代码

binary-tree graph union-find

6
推荐指数
0
解决办法
634
查看次数

在二叉树中,找到有多少祖父只有两三个孙子

                                   8
                                /      \
                              4         12
                             / \         / \
                           3    6       2   1
                          / \   / \    /   / \
                         7  10 13 15  5   9  11
                                             /
                                            14 
Run Code Online (Sandbox Code Playgroud)

我需要找到一棵树的祖父,在这个例子中,我只有一个祖父,12号(我需要他只有两三个孙子).

这是我到目前为止所尝试的:

int T(struct node * tree){
    int t = 0;
    if (tree == NULL)
        return 0;
    if (tree->left && tree->right)
    {    //In this case i check if we NOT have all the four grandchildrens.
        if (!((tree->left->left) && (tree->left->right) && (tree->right->left) && (tree->right->right)))
        {
            t =  1 + T(tree->left) + T(tree->right); …
Run Code Online (Sandbox Code Playgroud)

c c++ binary-tree

6
推荐指数
1
解决办法
568
查看次数

为什么即使使用延续传递样式,遍历大型二叉树也会导致堆栈溢出?

专家F#3.0一书的第9章介绍了如何在遍历二叉树时使用延续传递样式来避免堆栈溢出.我编写的树遍历代码几乎与本书中的代码完全相同,但我仍然得到了堆栈溢出.我的代码如下:

type 'a Tree =
  | Leaf   of 'a
  | Branch of 'a Tree * 'a Tree

let rec mkLeftLeaningTree n tree =
  if n = 0 then
    tree
  else
    Branch (mkLeftLeaningTree (n - 1) tree, Leaf "right")

let leftLeaningTree1 = Leaf "left"
let leftLeaningTree2 = mkLeftLeaningTree 30000 leftLeaningTree1
let leftLeaningTree3 = mkLeftLeaningTree 30000 leftLeaningTree2
let leftLeaningTree4 = mkLeftLeaningTree 30000 leftLeaningTree3
let leftLeaningTree5 = mkLeftLeaningTree 30000 leftLeaningTree4
let leftLeaningTree6 = mkLeftLeaningTree 30000 leftLeaningTree5

let sizeContAcc tree =
  let rec …
Run Code Online (Sandbox Code Playgroud)

mono f# binary-tree tail-recursion continuation-passing

6
推荐指数
1
解决办法
220
查看次数

使用模板的C++ treeset实现

我必须为树集编写一个模板.叶子的大小为0.当调用create_empty_set()时,它应该生成一个叶子,当你添加T数据时,叶子应该成为一个分支,它的值应该放在左边或右边.不允许重复.我在这里发布老师的指示:

So, you'll need three classes: a supertype SortedTree and two subtypes named Branch and Leaf.

LinkedList nodes carried little integers with them. For our set, we want to do something better: we wish
the set to be able to contain any kind of values. The way to accomplish this is to make use of templates:
a TreeSet<T> contains values of type T.

Where do the set's elements reside exactly? Each Branch node contains exactly one T, while the leaves …
Run Code Online (Sandbox Code Playgroud)

c++ templates binary-tree treeset binary-search-tree

6
推荐指数
1
解决办法
378
查看次数