如果这毫无意义,请原谅我,但我只是在学习。我偶然发现了一段使用级别搜索遍历二叉树的代码。我大部分了解其背后的逻辑,但有些部分让我感到困惑,主要是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();
}
}
答案 0 :(得分:2)
我会尽力回答您的问题。
节点左,右;在Node类中。我是否正确,我们只是在制作此类类的变量?
是的,这是正确的。声明之后,您的Node类具有两个新属性Node left和Node right。
节点根;在BinaryTree类中。这是Node类型的对象吗?
是的,这是一个值为null的Node的实例化。在Java Language Specification中,第4.12.5节:
变量的初始值
程序中的每个变量都必须有一个值,然后才能使用它的值:
每个类变量,实例变量或数组组件在创建时都使用默认值>初始化
[...]对于所有引用类型,默认值为 null 。
tree_level.root.left.right =新Node(5)
将类型为Node的新对象放置在BinaryTree中。此节点的值为5。在这种情况下,类似于: