2025-01-19 二叉树的遍历搜索
This commit is contained in:
parent
deffe97124
commit
325dde088b
@ -1,6 +1,6 @@
|
|||||||
package tree;
|
package tree;
|
||||||
|
|
||||||
public class TreeIterator {
|
public class BinaryTreeIterator {
|
||||||
|
|
||||||
private TreeNode root;
|
private TreeNode root;
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ public class TreeIterator {
|
|||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
int[] arr = {7, 3, 10, 12, 5, 1, 9};
|
int[] arr = {7, 3, 10, 12, 5, 1, 9};
|
||||||
TreeIterator treeIterator = new TreeIterator();
|
BinaryTreeIterator treeIterator = new BinaryTreeIterator();
|
||||||
treeIterator.transTree(arr);
|
treeIterator.transTree(arr);
|
||||||
System.out.println("前序遍历:");
|
System.out.println("前序遍历:");
|
||||||
treeIterator.forwardIterator(treeIterator.root);
|
treeIterator.forwardIterator(treeIterator.root);
|
157
src/dataANDcalc/java/tree/BinaryTreeSearch.java
Normal file
157
src/dataANDcalc/java/tree/BinaryTreeSearch.java
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user