有人可以解释一下此Java代码吗?

时间:2020-04-24 19:04:39

标签: java

如果这毫无意义,请原谅我,但我只是在学习。我偶然发现了一段使用级别搜索遍历二叉树的代码。我大部分了解其背后的逻辑,但有些部分让我感到困惑,主要是3行-

Node left, right;在Node类中。我是否正确,我们只是在制作此类类型的变量?

Node root;在BinaryTree类中。这是Node类型的对象吗?我以为您必须实例化类才能拥有对象?

tree_level.root.left.right = new Node(5);我不知道这里发生了什么。我知道tree_level是对象,并且可以通过该对象访问根变量,但是root如何才能从Node类访问多个左右变量。

我想我对这两个类如何关联而没有实例化感到更加困惑,我也看不到任何静态代码。

package com.company;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
import org.w3c.dom.ls.LSOutput;

import java.util.Queue;
import java.util.LinkedList;

class Node{
    int data;
    Node left, right;

    public Node(int item){
        data = item;
        left = null;
        right = null;
    }
}

public class BinaryTree {

    Node root;

    public void printLevelOrder(){


        Queue<Node> queue = new LinkedList<Node>();
        queue.add(root);

        while(!queue.isEmpty()){
            System.out.println("While loop starts...");
            for(Node s : queue) {
                System.out.println("Loop: " + s.data);
            }


            Node tempNode = queue.poll();
            System.out.println(tempNode.data + " ");

            if(tempNode.left != null){
                queue.add(tempNode.left);
            }
            if(tempNode.right != null){
                queue.add(tempNode.right);
            }
        }

    }

    public static void main(String[] args) {



        BinaryTree tree_level = new BinaryTree();

        tree_level.root = new Node(1);
        tree_level.root.left = new Node(2);
        tree_level.root.right = new Node(3);
        tree_level.root.left.left = new Node(4);
        tree_level.root.left.right = new Node(5);

        System.out.println("The level order traversal of the binary tree is: ");
        tree_level.printLevelOrder();

    }
}

1 个答案:

答案 0 :(得分:2)

我会尽力回答您的问题。

节点左,右;在Node类中。我是否正确,我们只是在制作此类类的变量?

是的,这是正确的。声明之后,您的Node类具有两个新属性Node left和Node right。

enter image description here

节点根;在BinaryTree类中。这是Node类型的对象吗?

是的,这是一个值为null的Node的实例化。在Java Language Specification中,第4.12.5节:

变量的初始值

程序中的每个变量都必须有一个值,然后才能使用它的值:

每个类变量,实例变量或数组组件在创建时都使用默认值>初始化

[...]对于所有引用类型,默认值为 null

tree_level.root.left.right =新Node(5)

将类型为Node的新对象放置在BinaryTree中。此节点的值为5。在这种情况下,类似于:

enter image description here