java实现建立搜索二叉树并中序遍历

搜索二叉树就不多说了是数据结构中树的一种延伸,可以参考这篇博客
搜索二叉树

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);
    }
}
发布了73 篇原创文章 · 获赞 81 · 访问量 9948

猜你喜欢

转载自blog.csdn.net/qq_41910353/article/details/103136064
今日推荐