排序二叉树

来源:互联网 发布:java完全自学第一步 编辑:程序博客网 时间:2024/06/06 08:59

1. 节点

public class Node {    // 数据项    public long data;    // 左子节点    public Node leftChild;    // 右子节点    public Node rightChild;    public Node(long data) {        this.data = data;    }}

2. 二叉树

public class Tree {    // 根节点    public Node root;    public void insert(long value) {        // 创建 结点对象        Node newNode = new Node(value);        // 创建遍历对象        Node current = root;        Node parent;        if (root == null) {            root = new Node(value);            return;        }        // 循环遍历        while (true) {            // 要插入的结点 与 当前结点进行比较            parent = current;            if (value > parent.data) {                // 右侧插入                current = current.rightChild;                if (current == null) {                    parent.rightChild = newNode;                    return;                }            } else {                // 左侧插入                current = current.leftChild;                if (current == null) {                    parent.leftChild = newNode;                    return;                }            }        }    }    /**     * 通过数据查找结点     *      * @param value     */    public Node find(long value) {        Node currentNode = root;        if (root == null) {            return null;        }        while (currentNode.data != value) {            if (value > currentNode.leftChild.data) {                // 向右查找                currentNode = currentNode.rightChild;            } else {                currentNode = currentNode.leftChild;            }            if (currentNode == null) {                return null;            }        }        return currentNode;    }    /**     * 前序遍历 : 头。左 右     *      * @param localNode     */    public void frontOrder(Node localNode) {        if (localNode != null) {            // 访问根节点            System.out.println(localNode.data + ",");            frontOrder(localNode.leftChild);            frontOrder(localNode.rightChild);        }    }    /**     * 中序遍历     *      * @param localNode     */    public void inOrder(Node localNode) {        if (localNode != null) {            frontOrder(localNode.leftChild);            System.out.println(localNode.data + ",");            frontOrder(localNode.rightChild);        }    }    /**     * 后序遍历     */    public void afterOrder(Node localNode) {        if (localNode != null) {            // 后序遍历左子树            afterOrder(localNode.leftChild);            // 后序遍历右子树            afterOrder(localNode.rightChild);            // 访问根节点            System.out.println(localNode.data + ", ");        }    }}
原创粉丝点击