搜索二叉树就不多说了是数据结构中树的一种延伸,可以参考这篇博客
搜索二叉树
import java.util.ArrayList;
import java.util.Scanner;
class Node {
String data;
Node left;
Node right;
boolean leftType;
boolean rightType;
public Node(String data) {
this.data = data;
}
}
class ThreadBinaryTree<T> {
private Node preNode;
Node createBinaryTree(ArrayList arrayList, int index) {
Node node = null;
if (index < arrayList.size()) {
node = new Node((String) arrayList.get(index));
node.left = createBinaryTree(arrayList, index * 2 + 1);
node.right = createBinaryTree(arrayList, index * 2 + 2);
}
return node;
}
void inThreadOrder(Node node) {
if (node == null)
return;
//把左指针为空的指向前驱节点
inThreadOrder(node.left);
if (node.left == null) {
node.left = preNode;
node.leftType = true;
}
//把右指针为空的指向前驱节点
if (preNode != null && preNode.right == null) {
preNode.right = node;
preNode.rightType = true;
}
preNode = node;
inThreadOrder(node.right);
}
//中序遍历二叉树
void inThreadList(Node node) {
while (node != null && !node.leftType) {
node = node.left;
}
while (node != null) {
System.out.print(node.data + ",");
if (node.rightType) {
node = node.right;
} else {
node = node.right;
while (node != null && !node.leftType) {
node = node.left;
}
}
}
}
}
public class Test {
public static void main(String[] args) {
ThreadBinaryTree<Node> threadBinaryTree = new ThreadBinaryTree<>();
ArrayList<String> arrayList = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String s = scanner.next();
if(s.equals("#"))
break;
arrayList.add(s);
}
// arrayList.add("A");
// arrayList.add("B");
// arrayList.add("C");
Node root=threadBinaryTree.createBinaryTree(arrayList,0);
threadBinaryTree.inThreadOrder(root);
threadBinaryTree.inThreadList(root);
}
}