0
点赞
收藏
分享

微信扫一扫

二叉排序树的插入及4种遍历序列的实现

-----------------结点定义------------------

package Tree;
/*
二叉树节点定义
 */
public class TreeNode {
    int data;
    TreeNode lchild;
    TreeNode rchild;

    public TreeNode(int data) {
        this.data = data;
    }

    public TreeNode() {
    }

    @Override
    public String toString() {
        return "TreeNode{" +
                "data=" + data +
                '}';
    }
}

----------操作实现--------

package Tree;
/*
二叉查找树
 */
public class BinarySearchTree {
    TreeNode root;

    //构造二叉查找树
    public TreeNode insertNode( TreeNode node,int data) {
        if(node == null) return new TreeNode(data);//找到插入位置--构造节点插入
        else if(node.data>data) {
            node.lchild = insertNode(node.lchild,data);
        }else if(node.data<data) {
            node.rchild = insertNode(node.rchild,data);
        }else{
            node.data = data;
        }
        return node;
    }
    //提供插入接口
    public  void insert (int data) {
        root = insertNode(root,data);
    }
    //前序遍历
    public void preOrder(TreeNode root) {
        TreeNode p = root;
        if(p==null) {
            return;
        }
        System.out.println(p);
        preOrder(p.lchild);
        preOrder(p.rchild);

    }
    //中序遍历
    public void midOrder(TreeNode node) {
        if(node==null) return;
        midOrder(node.lchild);
        System.out.println(node);
        midOrder(node.rchild);
    }
    //后序遍历
    public void postOrder(TreeNode node) {
        if(node==null) return;
        postOrder(node.lchild);
        postOrder(node.rchild);
        System.out.println(node);
    }

    //层次遍历
    public void levelOrder(TreeNode root) {
        //准备循环队列
        TreeNode[] queue = new TreeNode[10];//数组大小取决于树的大小
        int front = 0;
        int rear = 0;
        int x = queue.length;
        //根节点入队
        queue[rear] = root;
        rear = (rear+1)%x;
        while(rear!=front) {
            //根结点出队
            TreeNode p = queue[front];
            front = (front+1)%x;
            System.out.println(p);//打印结点
            if(p.lchild!=null) {
                queue[rear] = p.lchild;//左孩子入队
                rear = (rear+1)%x;
            }
            if(p.rchild!=null) {
                queue[rear] = p.rchild;//右孩子入队
                rear = (rear+1)%x;
            }
        }
    }

    //测试
    public static void main(String[] args) {
        BinarySearchTree bst = new BinarySearchTree();
        bst.insert(1);
        bst.insert(0);
        bst.insert(9);
        bst.insert(10);
        bst.insert(52);
        bst.insert(100);
        bst.insert(256);
        bst.insert(33);
        bst.insert(64);
        bst.preOrder(bst.root);
        System.out.println("------------------");
        bst.midOrder(bst.root);
        System.out.println("------------------");
        bst.postOrder(bst.root);
        System.out.println("------------------");
        bst.levelOrder(bst.root);
    }

}
举报

相关推荐

0 条评论