簡體   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