数据结构与算法分析(Java语言描述)(17)—— 二叉搜索树的深度优先与广度优先遍历

来源:互联网 发布:风鸣网络 编辑:程序博客网 时间:2024/06/06 12:51

二叉搜索树的深度优先遍历


这里写图片描述

先序遍历


这里写图片描述

// 先序遍历二叉搜索树    public void preOrder() {        preOrder(root);    }    // 对以node为根的二叉搜索树进行前序遍历, 递归算法    private void preOrder(Node node) {        if (node != null) {            System.out.println(node.value);            preOrder(node.left);            preOrder(node.right);        }    }

中序遍历


这里写图片描述

// 中序遍历二叉搜索树    public void inOrder(){        inOrder(root);    }    // 对以 node 为根的二叉搜索树进行中序遍历,递归算法    private void inOrder(Node node){        if (node != null){            inOrder(node.left);            System.out.println(node.value);            inOrder(node.right);        }    }

后序遍历


这里写图片描述

// 后序遍历二叉搜索树    public void postOrder(){        postOrder(root);    }    // 对以 node 为根的二叉搜索树进行后序遍历,递归算法    private void postOrder(Node node){        if (node != null){            postOrder(node.left);            postOrder(node.right);            System.out.println(node.value);        }    }

二叉树的广度优先遍历


这里写图片描述

层序遍历


// 二叉搜索树的层序遍历(广度优先)    public void levelOrder(){        // 使用LinkedList来作为我们的队列        LinkedList<Node> q = new LinkedList<>();        q.add(root);        // 先将 根节点 放入 q 中,再移除 此节点,将此节点的 左子节点 和 右子节点 放入 q 中        // 直到 q 为空        while (!q.isEmpty()) {            Node node = q.remove();            System.out.println(node.key);            if (node.left != null) q.add(node.left);            if (node.right != null) q.add(node.right);        }    }

计算二叉树的深度

    // 计算二叉树的深度    public int getDepth() {        return getDepth(root);    }    private int getDepth(Node node) {        if (node == null)            return 0;        int left = getDepth(node.left);        int right = getDepth(node.right);        return left > right ? left + 1 : right + 1;    }

阅读全文
0 0
原创粉丝点击