陈辰sss 2022-10-31 23:13 采纳率: 66.7%
浏览 228
已结题

由标明空子树的先根遍历序列建立一棵二叉树

package test_6;

public class BTClass {
    BTNode<Character> b_49;
    String bstr_49;
    public BTClass() {
        b_49=null;
    }
    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=new BTNode<Character>(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<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);
    }
}

要求:由标明空子树的先根遍历序列建立一棵二叉树
我代码中的CreatBT_preOrder就是用来实现此功能的,但是用我的preOrder方法输出的时候,什么都没有输出,似乎在CreatBT_preOrder中声明的左子树右子树对象都死了,请问是为什么呢?我这个代码又该怎么改呢?本人递归和参数传递学得不是很好,希望能讲的细一点。

  • 写回答

4条回答 默认 最新

  • 游一游走一走 2022-11-01 09:01
    关注

    我们先解决问题,稍后再解决你的疑问

    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);
        }
    }
    

    你的疑惑解释:

    img


    对应的代码,你可以自己运行下感受下:

    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);
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月9日
  • 已采纳回答 11月1日
  • 创建了问题 10月31日

悬赏问题

  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表