package test_6;
public class BTClass {
BTNode b_49;
String bstr_49;
public BTClass() {
b_49=null;
}
int i_49=0;
public void CreatBT_preOrder(BTNode tn_49,String preStr_49) {
char c_49=preStr_49.charAt(i_49++);
if(c_49!='#') {
tn_49=new BTNode(c_49);
CreatBT_preOrder(tn_49.lchild_49,preStr_49);
CreatBT_preOrder(tn_49.rchild_49,preStr_49);
}else {
tn_49=null;
}
}
public void preOrder(BTNode tp_49) {
if(tp_49!=null) {
System.out.print(tp_49.data_49+" ");
preOrder(tp_49.lchild_49);
preOrder(tp_49.rchild_49);
}
}
public static void main(String args[]) {
BTClass t=new BTClass();
t.CreatBT_preOrder(t.b_49,"AB#C##D##");
t.preOrder(t.b_49);
}
}
要求:由标明空子树的先根遍历序列建立一棵二叉树
我代码中的CreatBT_preOrder就是用来实现此功能的,但是用我的preOrder方法输出的时候,什么都没有输出,似乎在CreatBT_preOrder中声明的左子树右子树对象都死了,请问是为什么呢?我这个代码又该怎么改呢?本人递归和参数传递学得不是很好,希望能讲的细一点。
我们先解决问题,稍后再解决你的疑问
package com.example.demo003.test;
class BTNode<T>{
BTNode<T> lchild_49;
BTNode<T> rchild_49;
T data_49;
public BTNode(T data_49) {
this.data_49 = data_49;
}
}
public class BTClass {
BTNode<Character> b_49;
String bstr_49;
public BTClass() {
b_49=new BTNode<>('#');
}
int i_49=0;
public void CreatBT_preOrder(BTNode<Character> tn_49,String preStr_49) {
char c_49=preStr_49.charAt(i_49++);
if(c_49!='#') {
tn_49.data_49=c_49;
tn_49.lchild_49=new BTNode<>('#');
tn_49.rchild_49=new BTNode<>('#');
CreatBT_preOrder(tn_49.lchild_49,preStr_49);
CreatBT_preOrder(tn_49.rchild_49,preStr_49);
}else {
tn_49=null;
}
}
public void preOrder(BTNode<Character> tp_49) {
if(tp_49!=null) {
System.out.print(tp_49.data_49+" ");
preOrder(tp_49.lchild_49);
preOrder(tp_49.rchild_49);
}
}
public static void main(String args[]) {
BTClass t=new BTClass();
t.CreatBT_preOrder(t.b_49,"AB#C##D##");
t.preOrder(t.b_49);
}
}
你的疑惑解释:
package com.example.demo003.test;
import java.util.Arrays;
public class Test04 {
private static final String[] data = new String[]{"1"};
public static void changeData(String[] dataParam) {
println(dataParam);
dataParam[0] = "2";
println(dataParam);
println(data);
dataParam = new String[]{"1"};
println(dataParam);
println(data);
}
private static void println(String[] param) {
System.out.println(param);
System.out.println(Arrays.toString(param));
}
public static void main(String[] args) {
println(data);
changeData(data);
}
}
在main函数中 t.b_49 为null,即使在CreatBT_preOrder中给它new了新对象,但返回到main依旧是null,
public class BTClass {
BTNode<Character> b_49;
String bstr_49;
public BTClass() {
b_49=null;
}
int i_49=0;
class BTNode<T> {
T data_49;
BTNode lchild_49;
BTNode rchild_49;
public BTNode(T t) {
data_49 = t;
}
}
public BTNode<Character> CreatBT_preOrder(String preStr_49) {
char c_49=preStr_49.charAt(i_49++);
if(c_49!='#') {
BTNode<Character> tn_49 = new BTNode<>(c_49);
tn_49.lchild_49 = CreatBT_preOrder(preStr_49);
tn_49.rchild_49 = CreatBT_preOrder(preStr_49);
return tn_49;
}else {
return null;
}
}
public void preOrder(BTNode<Character> tp_49) {
if(tp_49!=null) {
System.out.print(tp_49.data_49+" ");
preOrder(tp_49.lchild_49);
preOrder(tp_49.rchild_49);
}
}
public static void main(String args[]) {
BTClass t=new BTClass();
t.b_49 = t.CreatBT_preOrder("AB#C##D##");
t.preOrder(t.b_49);
}
}