Tag: 递归

平衡二叉搜索树

好吧,我想要一个二元搜索树来平衡,我知道为什么它不起作用,但我不知道如何解决它。 这就是我的平衡方法。 public void balance(){ if(isEmpty()){ System.out.println(“Empty Tree”); return; } if(!isEmpty()){ values = new Object[count()]; index = 0; createAscendingArray(root); clear(); balanceRecursive(0, index); values = null; } } private void createAscendingArray(TreeNode current){ if(current == null) return; if(current.getLeftNode() != null) createAscendingArray(current.getLeftNode()); else if(current.getRightNode() != null) createAscendingArray(current.getRightNode()); values[index] = current.getData(); index++; } private void balanceRecursive(int low, int high){ […]

在类Test中实例化一个类Test的成员递归吗?

这是递归吗? public class Test { Test test = new Test(); public static void main(String[] args) { new Test(); } } 使用实例初始化器的版本怎么样? public class Test { { Test test = new Test(); } public static void main(String[] args) { new Test(); } } 我问,因为我更新了我的旧答案 ,它显示了如何在没有递归的情况下制作StackOverflowError ,但现在我不能100%确定上面的代码是否是递归。

Java && || 在RETURN语句中?

我正在看一些Java算法示例,我在递归方法中遇到了这个代码片段: boolean subTree(TreeNode t1, TreeNode t2) { if (t1 == null) { return false; } if (t1.value == t2.value) { if (treeMatch(t1, t2)) return true;; } return (subTree(t1.left, t2) || subTree(t1.right, t2)); } 不知道(也从未见过)|| 在之前的返回语句中使用,更不用说递归语句了,真让我感到困惑。 我将代码复制到Eclipse中以查看它是否有效。 然后我替换了|| 用&&​​和Eclipse似乎并没有被它打扰。 从逻辑上讲,我理解这个递归代码应该继续沿着TreeNode t1的左右子树,但我正在寻找关于这种Java语法如何工作的更多理论解释。 有人可以解释||背后的含义 和Java的返回声明中的&&? 在递归方面它意味着什么? 它与递归一起使用时才有意义吗?

从二叉搜索树中递归删除

这是作业; 请不要只给我代码 我有两种方法: remove(T data)和removeRec(Node node, T data) 。 在当前状态下,似乎我的代码只删除了BST的root 。 @Override public T remove(T data) { if (data == null) { throw new IllegalArgumentException(“Data is null”); } if (root == null) { throw new java.util.NoSuchElementException(“BST is empty”); } else { size–; BSTNode dummy = new BSTNode(null); return removeRec(root, data, dummy).getData(); //This is probably wrong […]

递归回溯的问题

嘿伙计们,最近发布了我的算法问题。 从一组中查找给出最少量废物的数字 我略微修改了代码,所以它现在回溯到一定程度,但输出仍然存在缺陷。 我已经调试了这个大大调查所有变量值,似乎无法找出问题。 与直接解决方案相反的建议再次提供了很大的帮助。 我认为我的代码只有几个问题,但我无法解决问题。 //来自上一篇文章: 基本上,一个集合被传递给下面的这个方法,并且还传入一个条形的长度。解决方案应该输出集合中的数字,如果从条形长度中移除了集合中的某些数字,则给出最小量的浪费。 因此,条形长度10,设置包括6,1,4,因此解决方案是6和4,并且浪费是0.我在通过集合回溯的条件有一些麻烦。 我也尝试使用浪费的“全局”变量来帮助回溯方面,但无济于事。 SetInt是一个手动创建的集合实现,它可以添加,删除,检查集合是否为空并从集合中返回最小值。 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package recursivebacktracking; /** * * @author User */ public class RecBack { int WASTAGE = 10; int BESTWASTAGE; int BARLENGTH = 10; public void work() […]

Java中的递归Quicksort的分区实现不起作用

写了这个递归快速排序算法的Java实现,并且似乎出错了,因为我尝试排序的数组几乎完全排序,除了应该切换的两个元素(靠近数组的中间)。 我想要排序的整数数组是:4,77,98,30,20,50,77,22,49,2(10个元素)。 这是我的代码: public static void quickSort(int[] array, int start, int end) { if (start < end) { int partition = partition(array, start, end); quickSort(array, start, partition – 1); quickSort(array, partition + 1, end); } } public static int partition(int[] array, int left, int right) { int pivotValue = array[(left + right) / 2]; //Value […]

二维迷宫的递归算法?

(这不是重复)我们在所有4个侧面都有一个由X围绕的2D迷宫,也有内部块。 迷宫的所有这些字符都存储在2D数组中。 程序必须找到从’S’开始到目标’G’的路径。 为此,使用名为’solve(int row,int col)的布尔方法,并使用’S’的行和列索引进行初始化。 算法必须是递归的。 如果它能够找到’G’的路径并且其他方面是假的,那么它应该返回true。 这是我试图解决这个显示“部分正确结果”的问题的方法。 public boolean solve(int row, int col) { char right = this.theMaze[row][col + 1]; char left = this.theMaze[row][col – 1]; char up = this.theMaze[row – 1][col]; char down = this.theMaze[row + 1][col]; if (right == ‘G’ || left == ‘G’ || up == ‘G’ || down == […]

使用Java和SQLite的递归数据处理性能

如果您的答案与Java / SQLite无关,我很乐意阅读它。 环境 我使用以下方案将项目存储在数据库中: ################### # Item # ################### # _id # This is the primary key # parent_id # If set, it the ID of the item containing this item # date # An ordinary date # geocontext_id # Foreign key to a pair of named coordinates ################### ################### # Geocontext # ################### […]

Java – 使用递归从字符串创建所有子字符串

Java中的以下代码使用递归从字符串创建所有可能的子字符串。 我想知道有更好的编码方式吗? 我想使用递归。 public class main { public static void main(String[] args) { generate(“hello”); } public static void generate(String word) { if (word.length() == 1) { System.out.println(word); return; }else{ System.out.println(word); generate(word.substring(0, word.length()-1)); generate(word.substring(1, word.length())); } } } 常见问题Q – 为什么我要使用递归来做这个? 答 – 因为StackOverflow的首席执行官说递归很重要http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

无需任何循环即可递归生成功率集

你如何编写一个递归方法PowerSet(字符串输入)打印出传递给它的字符串的所有可能组合? 例如:PowerSet(“abc”)将打印出abc,ab,ac,bc,a,b,c 我已经看到了一些带循环的递归解决方案,但在这种情况下不允许循环。 有任何想法吗? 编辑:所需方法只有一个参数,即字符串输入。