2025-01-19 二叉树的遍历搜索

This commit is contained in:
liangjinglin 2025-01-20 20:13:21 +08:00
parent deffe97124
commit 325dde088b
2 changed files with 159 additions and 2 deletions

View File

@ -1,6 +1,6 @@
package tree;
public class TreeIterator {
public class BinaryTreeIterator {
private TreeNode root;
@ -108,7 +108,7 @@ public class TreeIterator {
public static void main(String[] args) {
int[] arr = {7, 3, 10, 12, 5, 1, 9};
TreeIterator treeIterator = new TreeIterator();
BinaryTreeIterator treeIterator = new BinaryTreeIterator();
treeIterator.transTree(arr);
System.out.println("前序遍历:");
treeIterator.forwardIterator(treeIterator.root);

View File

@ -0,0 +1,157 @@
package tree;
public class BinaryTreeSearch {
private TreeNode root;
private void transTree(int[] arr){
for (int i = 0; i < arr.length; i++) {
TreeNode treeNode = new TreeNode(arr[i]);
addNode(root, treeNode);
}
}
private void addNode(TreeNode tempNode, TreeNode treeNode){
if(root == null){
root = treeNode;
return;
}
if(treeNode.node<tempNode.node){
if (tempNode.left == null){
tempNode.left = treeNode;
} else {
addNode(tempNode.left, treeNode);
}
}
if(treeNode.node>tempNode.node){
if (tempNode.right == null){
tempNode.right = treeNode;
} else {
addNode(tempNode.right, treeNode);
}
}
}
private TreeNode forwardSearch(TreeNode treeNode, int node){
TreeNode resultNode = null;
if(treeNode == null){
System.out.println("当前节点为空");
return null;
}
if(treeNode.node == node){
System.out.println("已找到treeNode:"+ treeNode.toString());
resultNode = treeNode;
return resultNode;
}
System.out.println("当前treeNode为"+ treeNode.toString());
if (treeNode.left != null){
resultNode = forwardSearch(treeNode.left, node);
}
if(resultNode != null){
return resultNode;
}
if (treeNode.right!= null){
resultNode = forwardSearch(treeNode.right, node);
}
return resultNode;
}
private TreeNode middleSearch(TreeNode treeNode, int node){
TreeNode resultNode = null;
if(treeNode == null){
System.out.println("当前节点为空");
return resultNode;
}
if (treeNode.left!= null){
resultNode = middleSearch(treeNode.left, node);
}
if(resultNode!= null){
return resultNode;
}
if(treeNode.node == node){
System.out.println("已找到treeNode:"+ treeNode.toString());
resultNode = treeNode;
return resultNode;
}
System.out.println("当前treeNode为"+ treeNode.toString());
if (treeNode.right!= null){
resultNode = middleSearch(treeNode.right, node);
}
return resultNode;
}
private TreeNode behindSearch(TreeNode treeNode, int node){
TreeNode resultNode = null;
if(treeNode == null){
System.out.println("当前节点为空");
return resultNode;
}
if (treeNode.left!= null){
resultNode = behindSearch(treeNode.left, node);
}
if(resultNode != null){
return resultNode;
}
if (treeNode.right!= null){
resultNode = behindSearch(treeNode.right, node);
}
if(resultNode != null){
return resultNode;
}
if(treeNode.node == node){
System.out.println("已找到treeNode:"+ treeNode.toString());
resultNode = treeNode;
return resultNode;
}
System.out.println("当前treeNode为"+ treeNode.toString());
return resultNode;
}
public static class TreeNode{
private int node;
private TreeNode left;
private TreeNode right;
public TreeNode(int node) {
this.node = node;
}
@Override
public String toString() {
return "TreeNode{" +
"node=" + node +
", left=" + (left == null ? "null" : left.node) +
", right=" + (right == null ? "null" : right.node) +
'}';
}
}
public static void main(String[] args) {
int[] arr = {7, 3, 10, 12, 5, 1, 9};
BinaryTreeSearch treeSearch = new BinaryTreeSearch();
treeSearch.transTree(arr);
System.out.println("前序遍历:");
treeSearch.forwardSearch(treeSearch.root, 5);
System.out.println("中序遍历:");
treeSearch.middleSearch(treeSearch.root, 5);
System.out.println("后序遍历:");
treeSearch.behindSearch(treeSearch.root, 5);
}
}