Questions tagged «binary-tree»

由节点组成的高级数据结构,每个节点最多具有2个子节点(左和右)。没有子节点的节点称为叶子,而具有相同父节点的两个节点称为同级。

3
建立美观的除数树
美观的除数树是输入的除数的树n,对于任何合数m,具有的两个孩子的节点对除数是最接近的平方根的m。左节点应为的较小除数,m右节点应为的较大除数m。树中的素数不应有子节点。您的树可能是文字艺术或图像的形式。文字艺术输出的规则如下。 间距规则 为了使树上的节点间隔开,我们有以下规则: 从根到给定深度的节点应全部位于输出中的同一行文本上。 / \不/ \ / \ / 3 2 3 2 对于左节点,如果节点是一个数字,则输入分支应该在右上角,否则在最后一个数字的正上方。例: /与/ 3720 对于右边的节点,如果节点是一位数字,则输入分支应该在左上角,否则在第一位数字的正上方。例: \ AND \ 7243 对于传出的左分支,分支应在数字左侧开始一个空格。例: 275 / 11 对于传出的右分支,分支应在数字右边开始一个空格。例: 275 \ 25 树的同一层上的任何两个节点之间至少应有两个空格。同时,在树的同一层上的任何两个子树之间的空间应尽可能少。 该树不起作用,因为“子树”太近了。 504 / \ / \ / \ / \ 21。24 / \。/ \ / \。/ \ 3 7. …

22
自然派#0-摇滚
目标 创建一个接受输入的程序/函数N,检查N随机整数对是否相对质数,然后返回sqrt(6 * N / #coprime)。 TL; DR 这些挑战是仅需要自然和大脑(也许还有一些可重复使用的资源)才能逼近Pi的算法模拟。如果您在僵尸启示录期间确实需要Pi,那么这些方法不会浪费弹药!还有另外八个挑战。检出沙盒帖子以提出建议。 模拟 我们在模拟什么?好吧,两个随机整数是相对质数(即coprime或gcd == 1)的概率是6/Pi/Pi,因此计算Pi的自然方法是挖出两个桶(或少数几个)的岩石。数他们;看看他们的gcd是否为1;重复。这样做后,一对夫妇很多次,sqrt(6.0 * total / num_coprimes)会趋向Pi。如果计算世界末日后的平方根使您感到紧张,请不要担心!有牛顿法。 我们如何模拟这一点? 接受输入 N 请执行以下N次数: 均匀生成随机正整数,i并且j 用 1 <= i , j <= 10^6 如果gcd(i , j) == 1:result = 1 其他: result = 0 取N结果的总和,S 返回 sqrt(6 * N / S) 规格 输入值 …
39 code-golf  math  random  pi  approximation  popularity-contest  code-golf  sequence  number-theory  binary  coding-theory  code-golf  math  3d  code-golf  code-golf  math  number  code-golf  kolmogorov-complexity  code-golf  ascii-art  graphical-output  binary-tree  code-golf  ascii-art  code-golf  ascii-art  kolmogorov-complexity  code-golf  array-manipulation  hexadecimal  code-golf  math  number  set-theory  code-golf  math  arithmetic  number-theory  integer  code-golf  string  kolmogorov-complexity  code-golf  math  sequence  arithmetic  decision-problem  code-golf  code-golf  ascii-art  code-golf  array-manipulation  parsing  code-golf  string  ascii-art  kolmogorov-complexity  code-challenge  code-golf  sequence  code-golf  number  array-manipulation  sorting  code-golf  string  function  code-golf  arithmetic  code-golf  math  sequence  number-theory  primes  restricted-source  javascript  code-challenge  polyglot  rosetta-stone  code-golf  code-golf  regular-expression  code-golf  math  code-golf  math  primes  code-golf  ascii-art  kolmogorov-complexity  binary  code-golf  math  sequence  code-golf  sequence  subsequence  code-golf  string  code-golf  parsing  music  code-golf  grid  game  path-finding  board-game  code-golf  string  binary  code-golf  array-manipulation  balanced-string  code-golf  code-golf  algorithm  code-golf  string  number  arithmetic  array-manipulation  code-golf  array-manipulation  binary-tree  tree-traversal  code-golf  code-golf  tips  code-golf  string  base-conversion  code-golf  tips  s.i.l.o.s  code-golf  string  ascii-art  code-golf  code-challenge  code-golf  game 

7
种植二元森林!
受A014486的启发。 挑战 给定以10为底的整数输入,构造一个与输入对应的二进制森林的表示形式。表示形式包括但不限于嵌套数组和字符串。 怎么样? 将输入转换为二进制。1s代表分支,0s代表叶子。 为了使它更容易理解,我们以834(二进制的1101000010)为例。 我们从第一个数字开始。第一位数字是1,因此我们绘制分支: \ / 1个 或作为数组, {{1}} 下一个数字是1,因此我们绘制了更多分支(从左到右): \ / 1个 \ / 1个 或作为数组, {{1, {1}}} 下一位数字是0,因此我们放置了一片叶子: 0 \ / 1个 \ / 1个 或作为数组, {{1, {1, 0}}} 下一个数字是1,因此我们放置一个分支: \ / 0 1 \ / 1个 \ / 1个 或作为数组, {{1, {1, 0, {1}}}} …

14
这是BST的预定遍历吗?
背景 一个二叉树是有根树,其每个节点最多有两个孩子。 带标记的二叉树是一个二叉树,其每个节点都用一个正整数标记。此外,所有标签都是不同的。 甲BST(二进制搜索树)是标记的二叉树,其中,每个节点的标签比其左子树的所有节点的标签比在其右子树的所有节点的标签更大和更小。例如,以下是BST: 标记的二叉树的预遍历由以下伪代码定义。 function preorder(node) if node is null then return else print(node.label) preorder(node.left) preorder(node.right) 请参见下图以获得更好的直觉: 此二叉树的顶点按以下顺序打印: F, B, A, D, C, E, G, I, H 你可以阅读更多关于BSTS 这里,和更多的预购遍历这里。 挑战 给定一个整数列表一种一种a,您的任务是确定是否有一个BST的预遍历打印的正好是一种一种a。 输入项 包含正整数a的非空列表。一种一种a 任选地,长度一种一种a。 输出量 甲truthy值,如果一种一种a是一些BST的预购遍历。 一个falsey值,否则。 规则 标准规定了有效的意见,I / O,漏洞适用。 这是代码高尔夫球,因此最短的解决方案(以字节为单位)获胜。像往常一样,不要让可笑的简短的高尔夫语言解决方案阻止您以您选择的语言发布更长的答案。 这不是规则,但是如果包含测试解决方案的链接以及其工作原理的说明,您的答案会更好。 例子 Input ----> Output [1] ----> …

9
枚举二叉树
二叉树 二叉树是具有三种类型的节点的树: 没有子节点的终端节点 一元节点,每个节点有一个孩子 二进制节点,每个都有两个子节点 我们可以用BNF(巴克斯-纳尔形式)中给出的以下语法来表示它们: <e> ::= <terminal> | <unary> | <binary> <terminal> ::= "0" <unary> ::= "(1" <e> ")" <binary> ::= "(2" <e> " " <e> ")" 在此语法中,节点是按顺序排列的,每个节点都由一个数字表示,该数字表示其拥有的子代数。 莫兹金数 Motzkin数(OEIS)(Wikipedia)有多种解释,但一种解释是,nMotzkin数是具有n节点的不同二叉树的数目。莫兹金数表开始 N Motzkin number M(N) 1 1 2 1 3 2 4 4 5 9 6 21 7 51 …

27
为*写翻译
任务很简单。为*语言编写口译员。 这是Wiki的更大链接。 只有三个有效的*程序: * 打印“ Hello World” * 打印0到2,147,483,647之间的随机数 *+* 永远运行。 根据此问题的规范,第三种情况必须是无限循环 输入: 可以通过我们的标准I / O规则通过任何可接受的输入方法进行输入 它将永远是以上程序之一 输出: 第一种情况应打印准确Hello World,带有或不带有尾行。 对于第二种情况,如果您的语言的整数最大值小于2,147,483,647,请使用您的语言的整数最大值 根据我们的标准I / O规则,第一种情况和第二种情况可以打印到任何可接受的输出。 第三种情况不应给出任何输出。 得分: 因为这是代码高尔夫球,所以最短的答案(以字节为单位)获胜。
20 code-golf  interpreter  code-golf  array-manipulation  sorting  code-golf  halting-problem  code-golf  javascript  code-golf  algorithm  code-golf  arithmetic  code-golf  math  counting  code-golf  math  code-golf  decision-problem  radiation-hardening  code-golf  conversion  bitwise  code-golf  number  decision-problem  code-golf  string  decision-problem  code-golf  random  game  code-golf  ascii-art  graphical-output  code-golf  decision-problem  binary-tree  tree-traversal  code-challenge  array-manipulation  code-challenge  graphical-output  path-finding  test-battery  algorithm  code-golf  integer  factorial  code-golf  binary-tree  code-golf  grid  graph-theory  code-golf  regular-expression  quine  code-golf  encoding  code-golf  king-of-the-hill  javascript 

19
编写最短的程序来计算二叉树的高度
二叉树的高度是从根节点到最远离根节点的子节点的距离。 下面是一个示例: 2 <-- root: Height 1 / \ 7 5 <-- Height 2 / \ \ 2 6 9 <-- Height 3 / \ / 5 11 4 <-- Height 4 二叉树的高度:4 二叉树的定义 树是一个对象,其中包含一个带符号的整数值以及另外两个树或指向它们的指针。 二叉树结构的结构如下所示: typedef struct tree { struct tree * l; struct tree * r; int v; …

5
打印二叉树
受最近关于SO的问题启发... 编写函数以以下格式打印二叉树: 3 / \ 1 5 \ / \ 2 4 6 输出应由一行节点组成,然后由一行/和\表示关系的字符组成,再由一行节点等。 您可以假设所有节点都可以表示为单个字符。 最低层的相邻节点应至少隔开一个空间,上方的节点应适当分开。 有两个孩子的节点应精确地放置在其直接孩子的中间。 亲子关系应该在父母和合适的孩子之间的中间位置(无论您选择哪种方式)。 输入: 输入将作为函数的参数提供。我不会指定树的确切结构,但是它必须可用作实际的二叉树。在我的程序中,没有“树以字符串的形式同时显示为预期的输出”。 您可以打印到输出流或返回包含您选择的输出的字符串。 最短代码的要点,但是与90%正常工作的短解决方案相比,我更喜欢完整工作的长期解决方案。 更新赏金: 为了奖励,我(优化程序)进行了一些小的更改: 输入可以来自STDIN,ARGV或函数参数。 输出必须在STD​​OUT上(或console.log对于JS) 您可以假设输入为数组形式,例如。[1,2,3]要么[1 2 3] 更新2-二进制树实际上应该是二进制搜索树。由于我最初没有提到这一点,因此我将允许用户将将普通数组转换为二进制搜索树数组作为单独的程序对待,而最终字节数仅用于程序将数组作为参数并打印出来像二叉树。

1
正则表达式验证正则表达式[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Code Golf Stack Exchange 的主题。 2年前关闭。 构建一个将接受正则表达式字符串作为输入的正则表达式,并检查其是否有效。基本上,您的正则表达式应该能够验证自己。(任何无效的正则表达式都不应进行验证,因此您不能使用.*。;)) 您的风味必须得到众所周知的实现(Perl,sed,grep,gawk等)的完全支持,并且必须完全支持那些实现所支持的功能。[不用担心律师说话;我只是想消除所有可能导致智能***的漏洞。] 我会对此进行编码,但是我担心它会给那些知道和使用非功能丰富的风味的人带来优势。还是我的担心没有根据?
17 code-challenge  code-golf  code-golf  game  sudoku  code-challenge  math  ai-player  code-challenge  sorting  rosetta-stone  code-challenge  code-challenge  programming-puzzle  code-golf  number  code-golf  maze  code-golf  math  regular-expression  code-golf  sequence  code-golf  graph-theory  code-golf  string  word-puzzle  natural-language  brainfuck  metagolf  optimized-output  fastest-algorithm  code-golf  game-of-life  cellular-automata  code-golf  puzzle-solver  grid  code-golf  combinatorics  binary-tree  popularity-contest  code-challenge  code-golf  ascii-art  kolmogorov-complexity  brainfuck  metagolf  code-golf  c  date  code-golf  word-puzzle  crossword  word-search  code-golf  code-golf  quine  code-golf  string  random 

7
二叉树旋转
平衡的二进制搜索树对于保证O(log n)查找(或类似操作)至关重要。在动态环境中,随机地插入和/或删除了许多密钥,树可能会退化为链接列表,这对于查找来说是可怕的。因此,存在多种抵消这种效果的自平衡二叉树(例如AVL树或八叉树)。这些树是基于不同种类的旋转来重新平衡树的。 轮换 在此挑战中,我们将仅关注单个右旋,这样的旋转(左旋将是对称的)如下所示: 5 3 / \ / \ 3 6 => 1 5 / \ / \ 1 4 4 6 如果有任何叶子1,4或者6有左子树或右子树,则旋转只需将它们保留在那里。如果这是较大树的子树,则只需在节点处“将其切除”,5然后将旋转后的树(现在为node 3)“重新连接” 到该节点。 挑战 给定二分搜索树1和关键字,如上所述,该树在该节点上向右旋转。上例中提供的密钥为5。 规则和I / O 您可以使用任何类型的键,只要您选择的键与测试用例的键之间存在双射 您可以选择二叉树的任何表示形式,只要没有歧义(例如,[3,[]]除非另有说明,否则是模棱两可的),这对于您选择的语言是很自然的 由于输入将始终是二叉搜索树,因此没有重复的键 您可以假设密钥包含在树中 您可以假定包含密钥的节点有一个左子节点 您可能无法在提供的键下假设正确的子树 您可能不认为旋转之前树是不平衡的 您可能不认为旋转后树是平衡的 您可以使用任何默认的I / O方法 您提交的内容可能是返回树的功能或打印解决方案的完整程序 测试用例 这些示例表示一棵树,如下所示 如果是一片叶子: [] 如果它是带有键的树x并且两个子树都是叶子:[x] 如果它是带有键x和子树的树left right:[x,left,right] …

10
编写最短程序以检查二叉树是否平衡
对于平衡二叉树中的每个节点,左子子树和右子子树的高度最大差值为1。 二叉树的高度是指从根节点到最远离根节点的子节点的距离。 下面是一个示例: 2 <-- root: Height 1 / \ 7 5 <-- Height 2 / \ \ 2 6 9 <-- Height 3 / \ / 5 11 4 <-- Height 4 二叉树的高度:4 以下是二进制树和有关它们是否平衡的报告: 上面的树是不平衡的。 上面的树是平衡的。 编写尽可能短的程序,该程序接受二叉树的根作为输入,如果树不平衡,则返回假值,如果树平衡,则返回真值。 输入值 二叉树的根。这可能是以对根对象的引用或什至是二叉树的有效表示形式的列表的形式。 输出量 返回真实值:如果树是平衡的 返回falsey值:如果树为un平衡。 二叉树的定义 树是一个对象,其中包含一个值以及另外两个树或指向它们的指针。 二叉树的结构如下所示: typedef struct T { …

12
二元分支
给定一个二进制数字,您的任务是创建一个深度为2的该数字的“分支”。 例如,0作为输入,您应该完全输出以下内容: /000 /00 / \001 0 \ /010 \01 \011 这应该是分支机构如何创建的完全自我解释。深度2表示我们计算最多2个数字的分支。我们还按顺序计算分支,顶部为零,底部为零。 更多测试用例: 0 /000 /00 / \001 0 \ /010 \01 \011 1 /100 /10 / \101 1 \ /110 \11 \111 00 /0000 /000 / \0001 00 \ /0010 \001 \0011 01 /0100 /010 / \0101 01 \ …

12
从排序的整数列表中创建平衡的BST
给定一个唯一的,排序的整数列表,创建一个平衡的二进制搜索树,表示为数组而不使用递归。 例如: func( [1,2,3,5,8,13,21] ) => [5,2,13,1,3,8,21] 在开始之前,有个提示:我们可以将这个问题简化很多,这样我们实际上就不必考虑输入整数(或者与此有关的任何可比较对象!)。 如果我们知道输入列表已经排序,则其内容无关紧要。我们可以简单地根据原始数组的索引来考虑它。 输入数组的内部表示将变为: func( [0,1,2,3,4,5,6] ) => [3,1,5,0,2,4,6] 这意味着我们不必编写必须处理类似对象的东西,而只需要编写一个将[0,n)范围映射到结果数组的函数。获得新订单后,我们可以简单地将映射应用于输入中的值以创建返回数组。 有效的解决方案必须: 接受零元素数组并返回一个空数组。 接受长度为n的整数数组并返回整数数组 长度在n与2的下一个最高幂减1之间。(例如,对于输入大小13,返回13到15之间的任意值)。 表示BST的数组,其中根节点位于位置0,高度等于log(n),其中0表示丢失的节点(null如果您的语言允许,则为类似值)。空节点(如果存在)必须仅存在于树的末尾(例如[2,1,0]) 输入整数数组具有以下保证: 值是大于零的32位有符号整数。 价值观是独一无二的。 值从零位置开始按升序排列。 值可能很稀疏(即彼此不相邻)。 以ascii字符数表示的最简洁的代码胜出,但是我也希望看到针对任何特定语言的优雅解决方案。 测试用例 简单数组的输出,包含1to的nfor n。如上所述,尾随0s是可选的。 [] [1] [2,1,0] [2,1,3] [3,2,4,1,0,0,0] [4,2,5,1,3,0,0] [4,2,6,1,3,5,0] [4,2,6,1,3,5,7] [5,3,7,2,4,6,8,1,0,0,0,0,0,0,0] [6,4,8,2,5,7,9,1,3,0,0,0,0,0,0] [7,4,9,2,6,8,10,1,3,5,0,0,0,0,0] [8,4,10,2,6,9,11,1,3,5,7,0,0,0,0] [8,4,11,2,6,10,12,1,3,5,7,9,0,0,0] [8,4,12,2,6,10,13,1,3,5,7,9,11,0,0] [8,4,12,2,6,10,14,1,3,5,7,9,11,13,0] [8,4,12,2,6,10,14,1,3,5,7,9,11,13,15]

11
解释松散范围
解释松散范围 ListSharp是一种解释型编程语言,具有许多功能,其中一个功能是基于1索引的范围创建器,其工作方式如下: 您可以将范围定义为(INT) TO (INT)或仅定义(INT)两个int可以从min到max int32值的范围 然后,您可以使用这些范围来提取数组的元素,而不必担心会超出其边界 因此: 1 TO 5 产生: {1,2,3,4,5} 3 产生: {3} 范围可以使用AND运算符相加 1 TO 5 AND 3 TO 6 产生: {1,2,3,4,5,3,4,5,6} 记住这也适用于负数 3 TO -3 产生: {3,2,1,0,-1,-2,-3} 挑战如下: 输入值 字符数组和先前定义的range子句作为字符串 输出量 范围中基于1索引位置的元素(不存在/负索引会转换为空字符) 如何取胜 作为代码高尔夫球挑战,您应该创建具有最少字节数的程序以获胜 有人指出不存在空字符,因此您应该忽略它们(我仅在此处显示它们是为了使它们更易于理解,但却使人感到困惑) 测试用例: input array is: {'H','e','l','l','o',' ','W','o','r','l','d'} range clause: "1 TO …
13 code-golf  array-manipulation  parsing  code-golf  string  ascii-art  kolmogorov-complexity  code-challenge  code-golf  sequence  code-golf  number  array-manipulation  sorting  code-golf  string  function  code-golf  arithmetic  code-golf  math  sequence  number-theory  primes  restricted-source  javascript  code-challenge  polyglot  rosetta-stone  code-golf  code-golf  regular-expression  code-golf  math  code-golf  math  primes  code-golf  ascii-art  kolmogorov-complexity  binary  code-golf  math  sequence  code-golf  sequence  subsequence  code-golf  string  code-golf  parsing  music  code-golf  grid  game  path-finding  board-game  code-golf  string  binary  code-golf  array-manipulation  balanced-string  code-golf  code-golf  algorithm  code-golf  string  number  arithmetic  array-manipulation  code-golf  array-manipulation  binary-tree  tree-traversal  code-golf  code-golf  tips  code-golf  string  base-conversion  code-golf  tips  s.i.l.o.s  code-golf  string  ascii-art  code-golf  code-challenge  code-golf  game 

5
释放二叉树
因此,在阅读一些基本的计算机科学概念之前。 二进制树是动态分配的结构(通常用于有序存储)。 由于其性质,对二叉树的遍历通常是递归的。 这是因为当有两种循环方式时,线性遍历(通过循环)是不自然的。 递归:这意味着将调用自身的函数。 在老式语言中,内存管理需要手动进行内存管理。 手册:意味着您必须自己做。 当您执行手动内存管理时,您需要实际要求底层系统释放树的每个成员。 释放:将内存恢复到全局状态,以便可以重复使用,并且不会耗尽内存。 释放:这是通过调用函数free()并将要恢复的指针传递给函数来完成的。 指针:它像一个虚拟的棍子。最后是记忆。当您请求内存时,您会得到一个具有内存的指针(虚拟棒)。完成后,您将归还指针(虚拟棒)。 递归解决方案: freeTree(Node* node) { freeTree(node->left); freeTree(node->right); free(node); } 然后问题是递归意味着您要重复调用同一函数。这会增加堆栈。增加堆栈会占用更多内存。释放树的原因是,您希望使用更多的内存来回存是适得其反的(即使您确实收回了内存的两个位)。 最后的问题是: 因此,问题集中在将上述递归版本转换为线性解决方案(这样您就不必使用内存了)。 给出节点类型 typedef struct Node Node; struct Node { Node* left; Node* right; }; 编写函数以释放这些节点的树。 限制条件: 无法使用递归(甚至不能间接使用) 无法分配任何动态空间进行跟踪。 注意有一个O(n)解 优胜者: 最佳复杂性。 抢七局:首先提交 抢七局:最少的字符。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.