gpt4 book ai didi

java - 为什么 `root` 一直保持为空?

转载 作者:行者123 更新时间:2023-12-01 13:48:18 27 4
gpt4 key购买 nike

我有一个非常基本的二叉树

import java.util.Scanner;


public class ExprTree {
// Data member
private ExprTreeNode root; // reference to root node
private String input;
private Scanner s = new Scanner(System.in);
// Constructor
public ExprTree() {
// root = new ExprTreeNode(key, leftPtr, rightPtr)
}
// Expression tree manipulation methods
public void build() {
System.out.println("Please enter a prefix sequence. avoid using spaces!");
input = s.nextLine();

for(int i = 0; i < input.length(); ++i) {
addToTree(root, input.charAt(i));
}
}

public void expression() {
}

public float evaluate() {
return 0;

}

public void clear() {

}

public void showStructure(ExprTreeNode t) {
if(t == null) // no more
return;
System.out.println(t.getKey() + "-> ");
showStructure(t.getLeft());
showStructure(t.getRight());
}

private void showSubTrees(ExprTreeNode p, int leven) {

}

private void addToTree(ExprTreeNode t, char key) {
if(t == null) { // no more
t = new ExprTreeNode(key, null, null);
return;
}
addToTree(t.getLeft(), key);
addToTree(t.getRight(), key);
}

public ExprTreeNode getRoot() {
return root;
}

public static void main(String[] args) {
ExprTree t = new ExprTree();
t.build();
t.showStructure(t.getRoot());
}
}

以及树节点类:

public class ExprTreeNode {
// Data memebers
private char key;
private ExprTreeNode left,
right;
// Constructor
public ExprTreeNode(char key, ExprTreeNode leftPtr, ExprTreeNode rightPtr) {
this.key = key;
left = leftPtr;
right = rightPtr;
}

public char getKey() {
return key;
}

public void setKey(char key) {
this.key = key;
}

public ExprTreeNode getLeft() {
return left;
}
public void setLeft(ExprTreeNode left) {
this.left = left;
}
public ExprTreeNode getRight() {
return right;
}
public void setRight(ExprTreeNode right) {
this.right = right;
}
}

在这一行中:

        for(int i = 0; i < input.length(); ++i) {
addToTree(root, input.charAt(i));
}

每次我使用 root 调用 addToTree 时,debugegr 都会显示 root 为 null,

即使我第一次调用 addToTree 时已经分配了根目录,并且调试器也显示了这一点。

为什么它一直保持为空?

最佳答案

您注释掉了该行

public ExprTree() {
// root = new ExprTreeNode(key, leftPtr, rightPtr);
// just use null for both left and right ptr
}

所以rootnull

记住java是按值传递的,所以

private void addToTree(ExprTreeNode t, char key) {
if(t == null) { // no more
t = new ExprTreeNode(key, null, null);
return;
}
addToTree(t.getLeft(), key);
addToTree(t.getRight(), key);
}

调用方式

 addToTree(root, input.charAt(i));

troot 具有相同的引用,即。 null,但不是对变量root的引用。所以你所做的就是重新分配一个局部变量。

关于java - 为什么 `root` 一直保持为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20177431/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com