我的递归程序没有按预期返回树中的最小元素
My recursive program is not returning the smallest element in the tree as intended
我有一棵树,我正在尝试编写一个递归方法来查找树中的最小值,但是我的方法没有返回树中的最小元素,我的输出是 运行 我的程序是Minimum is: 24
。这是我的代码:
package weekFour;
public class MinTree {
static int min;
static Tree tree = new Tree( 24,
new Tree( 45,
null ,
new Tree(8, null , null) ) ,
new Tree ( 17,
new Tree (74 , null , null ) ,
null ) );
public static void main(String[] args){
MinTree mt = new MinTree();
System.out.println("Minimum is: " + mt.findMin(tree, Integer.MAX_VALUE));
}
public int findMin(Tree tree, int min){
if(tree.getVal() < min) {
min = tree.getVal();
}
Tree tree1 = tree.left();
if (tree1 != null) {
findMin(tree1, min);
}
Tree tree2 = tree.right();
if (tree2 != null) {
findMin(tree2, min);
}
return min;
}
}
class Tree {
private int val;
private Tree left, right;
public Tree(int val, Tree left, Tree right){
this.val = val;
this.left = left;
this.right = right;
}
public int getVal(){
return val;
}
public Tree left(){
return left;
}
public Tree right(){
return right;
}
}
感谢您的宝贵时间
在您的 findMin
方法中,您没有捕获递归调用的结果...
变化:
Tree tree1 = tree.left();
if (tree1 != null) {
findMin(tree1, min);
}
Tree tree2 = tree.right();
if (tree2 != null) {
findMin(tree2, min);
}
像这样:
Tree tree1 = tree.left();
if (tree1 != null) {
min = findMin(tree1, min);
}
Tree tree2 = tree.right();
if (tree2 != null) {
min = findMin(tree2, min);
}
你本地min
名称=静态变量的min
名称。
更改它以获得正确的结果。或者做这样的事情=>
public int findMin(Tree tree, int min){
if(tree.getVal() < min) {
MinTree.min = tree.getVal();
}
Tree tree1 = tree.left();
if (tree1 != null) {
findMin(tree1, MinTree .min);
}
Tree tree2 = tree.right();
if (tree2 != null) {
findMin(tree2, MinTree .min);
}
return help.min;
}
我有一棵树,我正在尝试编写一个递归方法来查找树中的最小值,但是我的方法没有返回树中的最小元素,我的输出是 运行 我的程序是Minimum is: 24
。这是我的代码:
package weekFour;
public class MinTree {
static int min;
static Tree tree = new Tree( 24,
new Tree( 45,
null ,
new Tree(8, null , null) ) ,
new Tree ( 17,
new Tree (74 , null , null ) ,
null ) );
public static void main(String[] args){
MinTree mt = new MinTree();
System.out.println("Minimum is: " + mt.findMin(tree, Integer.MAX_VALUE));
}
public int findMin(Tree tree, int min){
if(tree.getVal() < min) {
min = tree.getVal();
}
Tree tree1 = tree.left();
if (tree1 != null) {
findMin(tree1, min);
}
Tree tree2 = tree.right();
if (tree2 != null) {
findMin(tree2, min);
}
return min;
}
}
class Tree {
private int val;
private Tree left, right;
public Tree(int val, Tree left, Tree right){
this.val = val;
this.left = left;
this.right = right;
}
public int getVal(){
return val;
}
public Tree left(){
return left;
}
public Tree right(){
return right;
}
}
感谢您的宝贵时间
在您的 findMin
方法中,您没有捕获递归调用的结果...
变化:
Tree tree1 = tree.left();
if (tree1 != null) {
findMin(tree1, min);
}
Tree tree2 = tree.right();
if (tree2 != null) {
findMin(tree2, min);
}
像这样:
Tree tree1 = tree.left();
if (tree1 != null) {
min = findMin(tree1, min);
}
Tree tree2 = tree.right();
if (tree2 != null) {
min = findMin(tree2, min);
}
你本地min
名称=静态变量的min
名称。
更改它以获得正确的结果。或者做这样的事情=>
public int findMin(Tree tree, int min){
if(tree.getVal() < min) {
MinTree.min = tree.getVal();
}
Tree tree1 = tree.left();
if (tree1 != null) {
findMin(tree1, MinTree .min);
}
Tree tree2 = tree.right();
if (tree2 != null) {
findMin(tree2, MinTree .min);
}
return help.min;
}