欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

树的广度优先遍历跟深度优先遍历

程序员文章站 2022-05-21 23:30:37
...

最近准备面试,刷刷应届生的基本算法.............

深度优先遍历

如下树的深度优先遍历结果为:A B D E C F G

 *     A
 *    / \
 *   B   C
 *  / \  /\
 * D  E F G

DFS实现

深度优先遍历分先序遍历、后序遍历、中序遍历
遍历顺序为先根节点、再左子树、再又子树
数据结构:
java实现逻辑

public void DFS(TreeNode root) {
        Stack<TreeNode> stack = new Stack<>();
        stack.add(root);
        while (!stack.isEmpty()) {
            // 移除最后一个
            TreeNode tempNode = stack.pop();
            System.out.println(tempNode.element);
            // 后进先出
            if (tempNode.right != null)
                stack.add(tempNode.right);
            if (tempNode.left != null)
                stack.add(tempNode.left);

        }
    }

广度优先遍历

如下树的广度优先遍历结果为:A B C D E F G

 *     A
 *    / \
 *   B   C
 *  / \  /\
 * D  E F G

BFS实现

数据结构:队列
java实现:

 public void BFS(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        // 先进先出
        while (!queue.isEmpty()) {
            TreeNode tempTreeNode = queue.remove();
            System.out.println(tempTreeNode.element);
            if (tempTreeNode.left != null)
                queue.add(tempTreeNode.left);
            if (tempTreeNode.right != null)
                queue.add(tempTreeNode.right);
        }
    }

 

相关标签: 算法