二分搜索树的层序遍历

 二分搜索树的层序遍历,即逐层进行遍历,即将每层的节点存在队列当中,然后进行出队(输出节点)和入队(存入下一层的节点)的操作,以此达到遍历的目的

import java.util.LinkedList;
import java.util.Queue;

/**
 * @author BestQiang
 */
public class BST2<E extends Comparable> {
    // 树的节点类
    class Node {
        E e;
        Node left;
        Node right;
        public Node(E e) {
            this.e = e;
            this.left = null;
            this.right = null;
        }
    }

    // 声明树的根节点
    private Node root;
    //声明树的大小
    private int size;

    public BST2() {
        this.root = null;
        this.size = 0;
    }

    // 获取二分搜索树的大小
    public int getSize() {
        return size;
    }

    // 判断二分搜索树是否为空树
    public boolean isEmpty() {
        return size == 0;
    }

    // 为二分搜索树添加不重复的元素
    public void add(E e) {
        root = add(root, e);
    }

    private Node add(Node node, E e) {
        if(node == null) {
            return new Node(e);
        }
        if(e.compareTo(node.e) < 0) {
            node.left = add(node.left, e);
        } else {
            node.right = add(node.right, e);
        }
        return node;
    }

    // 二分搜索树的层序遍历
    public void levleOrder() {
        Queue<Node> q = new LinkedList<>();
        q.add(root);
        while(!q.isEmpty()) {
            Node cur = q.remove();
            System.out.println(cur.e);
            if(cur.left != null) {
                q.add(cur.left);
            }
            if(cur.right != null) {
                q.add(cur.right);
            }
        }
    }

    public static void main(String[] args) {
        BST2<Integer> bst = new BST2<>();
        int[] nums = {5, 3, 6, 8, 4, 2};
        for(int num: nums)
            bst.add(num);

        /////////////////
        //      5      //
        //    /   \    //
        //   3    6    //
        //  / \    \   //
        // 2  4     8  //
        /////////////////
        bst.levleOrder();
        System.out.println();
    }

}

输出结果:

5
3
6
2
4
8

 

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务