用java写个二叉树
时间: 2023-09-20 17:06:00 浏览: 90
用java实现的二叉树结构
### 回答1:
好的,以下是一个简单的二叉树的 Java 实现:
```
class Node {
int value;
Node left;
Node right;
public Node(int value) {
this.value = value;
left = null;
right = null;
}
}
class BinaryTree {
Node root;
public BinaryTree() {
root = null;
}
public void insert(int value) {
root = insertRecursive(root, value);
}
private Node insertRecursive(Node current, int value) {
if (current == null) {
return new Node(value);
}
if (value < current.value) {
current.left = insertRecursive(current.left, value);
} else if (value > current.value) {
current.right = insertRecursive(current.right, value);
} else {
return current;
}
return current;
}
public boolean contains(int value) {
return containsRecursive(root, value);
}
private boolean containsRecursive(Node current, int value) {
if (current == null) {
return false;
}
if (value == current.value) {
return true;
}
return value < current.value
? containsRecursive(current.left, value)
: containsRecursive(current.right, value);
}
public void delete(int value) {
root = deleteRecursive(root, value);
}
private Node deleteRecursive(Node current, int value) {
if (current == null) {
return null;
}
if (value == current.value) {
if (current.left == null && current.right == null) {
return null;
}
if (current.right == null) {
return current.left;
}
if (current.left == null) {
return current.right;
}
int smallestValue = findSmallestValue(current.right);
current.value = smallestValue;
current.right = deleteRecursive(current.right, smallestValue);
return current;
}
if (value < current.value) {
current.left = deleteRecursive(current.left, value);
return current;
}
current.right = deleteRecursive(current.right, value);
return current;
}
private int findSmallestValue(Node root) {
return root.left == null ? root.value : findSmallestValue(root.left);
}
}
```
这是一个简单的二叉树的实现,它实现了插入、查询和删除操作。希望对您有所帮助!
### 回答2:
在Java中,我们可以使用面向对象的方式来实现二叉树。首先,我们需要定义一个节点类,用于表示二叉树的节点。
```java
class TreeNode {
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val) {
this.val = val;
left = null;
right = null;
}
}
```
接下来,我们可以创建一个二叉树类,其中包含插入节点、查找节点等操作。
```java
class BinaryTree {
TreeNode root;
public BinaryTree() {
root = null;
}
public void insert(int val) {
root = insertHelper(root, val);
}
private TreeNode insertHelper(TreeNode node, int val) {
if (node == null) {
node = new TreeNode(val);
} else {
if (val < node.val) {
node.left = insertHelper(node.left, val);
} else {
node.right = insertHelper(node.right, val);
}
}
return node;
}
public boolean search(int val) {
return searchHelper(root, val);
}
private boolean searchHelper(TreeNode node, int val) {
if (node == null) {
return false;
} else if (val == node.val) {
return true;
} else if (val < node.val) {
return searchHelper(node.left, val);
} else {
return searchHelper(node.right, val);
}
}
}
```
通过以上代码,我们可以创建一个二叉树对象,并向其中插入节点,查找节点等操作。
```java
public class Main {
public static void main(String[] args) {
BinaryTree tree = new BinaryTree();
tree.insert(8);
tree.insert(3);
tree.insert(10);
tree.insert(1);
tree.insert(6);
System.out.println(tree.search(6)); // 输出true
System.out.println(tree.search(5)); // 输出false
}
}
```
通过上述代码,我们可以实现一个简单的二叉树,并进行节点的插入和查找操作。
### 回答3:
二叉树是一种树状结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点。在Java中,我们可以使用节点类和二叉树类来实现二叉树。
首先,我们创建一个节点类,其中包含节点的值、左子节点和右子节点的引用。
```java
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int val) {
this.val = val;
this.left = null;
this.right = null;
}
}
```
然后,我们创建一个二叉树类,其中包含二叉树的根节点。
```java
public class BinaryTree {
public TreeNode root;
public BinaryTree() {
this.root = null;
}
public void insert(int val) {
root = insertRecursive(root, val);
}
private TreeNode insertRecursive(TreeNode root, int val) {
if (root == null) {
return new TreeNode(val);
}
if (val < root.val) {
root.left = insertRecursive(root.left, val);
} else if (val > root.val) {
root.right = insertRecursive(root.right, val);
}
return root;
}
public void inorderTraversal() {
inorderTraversalRecursive(root);
}
private void inorderTraversalRecursive(TreeNode root) {
if (root != null) {
inorderTraversalRecursive(root.left);
System.out.print(root.val + " ");
inorderTraversalRecursive(root.right);
}
}
}
```
在上面的代码中,我们实现了一个二叉树类,其中包含了插入节点和中序遍历的方法。插入节点的方法使用递归来找到合适的位置插入节点。中序遍历的方法使用递归遍历左子树、打印当前节点值、递归遍历右子树的顺序。
我们可以使用以下代码来使用这个二叉树。
```java
public class Main {
public static void main(String[] args) {
BinaryTree tree = new BinaryTree();
tree.insert(5);
tree.insert(3);
tree.insert(7);
tree.insert(1);
tree.insert(4);
System.out.println("Inorder Traversal:");
tree.inorderTraversal();
}
}
```
输出结果为:
```
Inorder Traversal:
1 3 4 5 7
```
这样,我们就成功地使用Java编写了一个二叉树。虽然上述代码只实现了二叉树的插入和中序遍历,但是我们可以根据需要进一步扩展,实现其他二叉树的操作。
阅读全文