标签: binary-tree

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

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

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

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

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

.net algorithm binary-tree genealogy

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

CompareTo可能返回0,替代TreeSet/TreeMap

我需要一组有序的对象,目前正在使用TreeSet.我的问题是compareTo对象经常会返回0,这意味着这两个对象的顺序保持不变.TreeMap(TreeSet默认情况下使用)然后将它们视为同一个对象,这不是真的.

TreeMap可以使用什么替代品?


使用案例:我有一组可显示的对象.我想按Y坐标对它们进行排序,以便它们以正确的顺序呈现.当然,两个对象可能具有相同的Y坐标.

java sorting collections binary-tree red-black-tree

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

二叉树转移

如何有效地跨两个不同的系统传输二叉树(不是平衡的树),保留其完整的结构?

c binary-tree data-structures

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

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

给出一种特殊类型的树,其中所有树叶都标有标记,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
查看次数

Python按顺序遍历一个平面列表

我已经创建了一个TreeNode类的方法,我想要返回一个按顺序树遍历的平面列表

我的示例树是:

示例树数据

顺序遍历输出应该是: [1, 1, 0, 2, 1, 3, 1, 1, 0]

但我得到了: [2, 1, 1, 0, 1, 3, 1, 1, 0]

这是我的代码:

def in_order_list(self, r = []):
    hasLeft = self.left is not None
    hasRight = self.right is not None
    if self is None:
        return
    else:
        if hasLeft:
            self.left.in_order_list(r)
        r.append(self.value)
        if hasRight:
            self.right.in_order_list(r)
    return r
Run Code Online (Sandbox Code Playgroud)

有人能告诉我为什么会这样吗?

谢谢Alex

python recursion binary-tree data-structures

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

用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
查看次数

打印二叉树的边界

如何打印二叉树的外框.

  1. 订单从上到下,从左到右,然后从下到上
  2. 打印所有leftest节点和最正常的节点
  3. 打印所有叶节点
  4. 打印只有1个叶子的所有节点

             100
            /   \ 
          50     150
         / \      /
       24   57   130
      /  \    \    \
    12   30    60   132
    
    Run Code Online (Sandbox Code Playgroud)

例如:输出应为100,50,24,12,30,57,60,130,132,150

如果我们编写三个不同的函数来打印左节点,叶节点和右节点,它可以很容易地解决,但需要O(n + 2logn)时间.

我也在寻找O(n)方法,但条件是每个节点只应访问一次,不需要额外的O(2logn)部分.

algorithm binary-tree

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

螺纹二进制搜索树的优点

关于螺纹二进制搜索树的解释(如果你知道它们,请跳过它):

我们知道在具有n个节点的二叉搜索树中,有n + 1个左右指针包含null.为了使用包含null的内存,我们按如下方式更改二叉树 -

对于树中的每个节点z:

如果left [z] = NULL,我们在left [z]中输入tree-predecessor(z)的值(即指向包含前任键的节点的指针),

如果right [z] = NULL,我们在右[z]中输入tree-successor(z)的值(同样,这是指向包含后继键的节点的指针).

像这样的树称为线程二进制搜索树,新链接称为线程.

我的问题是: 螺纹二进制搜索树的主要优点什么(与"常规"二叉搜索树相比).在网上快速搜索告诉我,迭代地实现有序遍历有助于,而不是递归地实现.

这是唯一的区别吗?还有其他方法可以使用线程吗?

这是如此有意义的优势吗?如果是这样,为什么?递归遍历也花费O(n)时间,所以..

非常感谢你.

algorithm binary-tree asymptotic-complexity binary-search-tree data-structures

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

如何在深度优先搜索的递归实现中返回bool?

我想编写一个函数来检查两个二叉树是否相同.

代码如下:

bool checkSame(Node* first, Node* second) {
    // Check if nodes are the same

    // Check left nodes: checkSame(first->left, second->left)
    // Check right nodes: checkSame(first->right, second->right)

}
Run Code Online (Sandbox Code Playgroud)

问题是我不知道该返回什么地方.我发现的所有DFS实现都有一个void返回值.有没有一个它返回一个布尔?

另外,我正在寻找递归解决方案,而不是迭代解决方案.

c++ recursion binary-tree function depth-first-search

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