public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = right; } }
时间: 2024-02-26 08:52:07 浏览: 85
这是一个Java类的定义,它表示一个二叉树节点。这个类有三个属性:val表示节点的值,left表示左子节点,right表示右子节点。类中有三个构造函数,分别用于创建节点对象。其中第一个构造函数是默认构造函数,没有参数;第二个构造函数有一个参数,用于创建只有一个值的节点;第三个构造函数有三个参数,用于创建具有左右子节点的节点。这个类主要用于构建二叉树。
相关问题
public class TreeNode{ int val; TreeNode left; TreeNode right; TreeNode(){} TreeNode(int val){this.val=val;} TreeNode(int val,TreeNode left,TreeNode right){ this.val=val; this.right=right; this.left=left; } }
这段代码定义了一个名为`TreeNode`的类,用于表示二叉树节点。该类包含了以下成员变量:
- `val`:表示节点的值,为整型。
- `left`:表示节点的左子节点,为`TreeNode`类型。
- `right`:表示节点的右子节点,同样为`TreeNode`类型。
此外,类中还定义了以下构造函数:
- 无参构造函数`TreeNode()`:用于创建一个空的节点。
- 带有一个参数的构造函数`TreeNode(int val)`:用于创建一个只包含值的节点。
- 带有三个参数的构造函数`TreeNode(int val, TreeNode left, TreeNode right)`:用于创建一个包含值、左子节点和右子节点的节点。
通过这个类的定义,我们可以创建二叉树并操作其中的节点。
给我解释一下下面这段代码每句话的意思 import java.util.LinkedList; import java.util.Queue; public class TreeNode { int val; TreeNode left; TreeNode right; public TreeNode(int val) { this.val = val; } public static void bfs(TreeNode root) { if (root == null) { return; } Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { TreeNode node = queue.poll(); System.out.print(node.val + " "); if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } } } public static void main(String[] args) { TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); root.left.left = new TreeNode(4); root.left.right = new TreeNode(5); root.right.left = new TreeNode(6); root.right.right = new TreeNode(7); bfs(root); } }
当然,下面是对代码每句话的解释:
```java
import java.util.LinkedList;
import java.util.Queue;
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val) {
this.val = val;
}
public static void bfs(TreeNode root) {
if (root == null) {
return;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
System.out.print(node.val + " ");
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
}
}
public static void main(String[] args) {
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
root.right.left = new TreeNode(6);
root.right.right = new TreeNode(7);
bfs(root);
}
}
```
- `import java.util.LinkedList` :导入`LinkedList`类,该类实现了链表数据结构。
- `import java.util.Queue` :导入`Queue`接口,该接口表示队列数据结构。
- `public class TreeNode { ... }` :定义一个`TreeNode`类,表示二叉树的节点,包含属性`val`、`left`和`right`,分别表示节点的值、左子节点和右子节点。
- `public TreeNode(int val) { ... }` :`TreeNode`类的构造函数,初始化节点的值。
- `public static void bfs(TreeNode root) { ... }` :定义一个静态方法`bfs`,表示广度优先搜索遍历二叉树,入参为根节点`root`。
- `if (root == null) { return; }` :如果根节点`root`为空,则直接返回。
- `Queue<TreeNode> queue = new LinkedList<>();` :创建一个队列`queue`,类型为`TreeNode`,即节点类型,使用`LinkedList`类来实现队列。
- `queue.offer(root);` :将根节点`root`加入队列中。
- `while (!queue.isEmpty()) { ... }` :当队列不为空时,循环执行以下代码块。
- `TreeNode node = queue.poll();` :从队列中取出队头元素`node`,并将其从队列中删除。
- `System.out.print(node.val + " ");` :访问当前节点的值,并输出到控制台。
- `if (node.left != null) { queue.offer(node.left); }` :如果当前节点有左子节点,则将其加入队列中。
- `if (node.right != null) { queue.offer(node.right); }` :如果当前节点有右子节点,则将其加入队列中。
- `public static void main(String[] args) { ... }` :程序入口函数。
- `TreeNode root = new TreeNode(1);` :创建根节点`root`,并初始化节点的值为`1`。
- `root.left = new TreeNode(2);` :创建节点`2`,并将其作为根节点`root`的左子节点。
- `root.right = new TreeNode(3);` :创建节点`3`,并将其作为根节点`root`的右子节点。
- `root.left.left = new TreeNode(4);` :创建节点`4`,并将其作为节点`2`的左子节点。
- `root.left.right = new TreeNode(5);` :创建节点`5`,并将其作为节点`2`的右子节点。
- `root.right.left = new TreeNode(6);` :创建节点`6`,并将其作为节点`3`的左子节点。
- `root.right.right = new TreeNode(7);` :创建节点`7`,并将其作为节点`3`的右子节点。
- `bfs(root);` :调用`bfs`方法,广度优先搜索遍历二叉树。
阅读全文