建立并遍历二叉树时遇到的问题(整理java版)

  • 问题:开始Node root = null; 将root传入createBiTree(Node node)后,root的地址并没有改变;
  • 代码环境:这里用递归的方式建立,并用前序方式遍历;
  • 原因:由于在进入createBiTree(Nodenode)调用栈之前,没有给root申请地址,而是在调用栈中申请,所以root仍是空的;
  • 解决方案:
    改变传入root对象引用的方式,在createBiTree()中把产生的root对象作为返回值返回.

问题代码如下:

/**
 * 
 * @author mike
 * 
 * 题目描述:建立并遍历二叉树,输入和建树一起,0表示叶节点,输出节点和对应的层数;
 * 
 * 输入:1 2 0 0 3 0 0
 * 输出:1--->1, 2--->2, 3--->2
 *
 */
public class Main{
    public static void createBiTree(Node node){
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();

        if(n != 0){     
            if(node == null)
                node = newNode();
            node.v = n;
            createBiTree(node.left);
            createBiTree(node.right);
        }else{
            node = null;
        }               

    }
    public static Node newNode(){
        return new Node();

    }
    public static void preOrder(Node node){
        if(node == null)
            return;
        System.out.println(node.v);
        preOrder(node.left);
        preOrder(node.right);
    }
    class Node{
        int v;
        Node left,right;
    }
    public static void main(String[] args) {
        Node root = null;
        createBiTree(root);
        preOrder(root);
    }

正确代码如下:

public class CopyOfMain{
    public static Node createBiTree(){
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();

        Node node = null;
        if(n != 0){     
            node = newNode();
            node.v = n;
            node.left = createBiTree();
            node.right = createBiTree();
        }else
            return null;
        return node;
    }
    public static Node newNode(){
        Node node = new Node();
        node.left = new Node();
        node.right = new Node();
        return node;
    }
    public static void preOrder(Node node,int level){
        if(node == null)
            return;
        System.out.println(node.v + "--->" + level);
        preOrder(node.left,level+1);
        preOrder(node.right,level+1);
    }
    public static void main(String[] args) {
        Node root = null;
        root = createBiTree();
        preOrder(root,1);
    }
}
class Node{
    int v;
    Node left,right;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值