繁体   English   中英

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

[英]Can Someone please explain this Java Code?

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

Node left, right; 在节点 class 中。 我是否正确,我们只是在制作这种 class 类型的变量?

Node root; 在二叉树 class 中。 这是 Node 类型的 object 吗? 我以为你必须实例化 class 才能拥有 object?

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

我想我对这两个类在没有任何实例化的情况下如何关联感到更加困惑,而且我也没有看到任何 static 代码。

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

    }
}

我会尽力回答你的问题。

节点左,右; 在节点 class 中。 我是否正确,我们只是在制作这种 class 类型的变量?

对,那是正确的。 在该声明之后,您的 class 节点具有两个新属性 Node left 和 Node right。

在此处输入图像描述

节点根; 在二叉树 class 中。 这是 Node 类型的 object 吗?

是的,这是一个值为 null 的节点的实例化。 来自Java 语言规范,第 4.12.5 节:

变量的初始值

程序中的每个变量在使用它的值之前都必须有一个值:

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

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

tree_level.root.left.right = 新节点(5)

Node 类型的新 object 被放置在 BinaryTree 中。 这个节点的值为 5。在这种情况下是这样的:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM