二叉树的深度优先遍历和广度优先遍历

1. 二叉树的深度优先遍历,使用栈Stack,

DFS(Depth First Search)

  function DFS(root){
        var stack = [];
        stack.push(root);
        var node = null;
        while(stack.length){
            node = stack.pop();
            //visit node.data;
            if(node.right){
                stack.push(node.right);
            }
            if(node.left){
                stack.push(node.left);
            }
        }
   }

2. 二叉树的广度优先遍历,使用队列Queue

BFS(Breadth First Search)

function BFS(root){
    var queue = [];
    queue.push(root);
    var node = null;
    while(queue.length){
        node = queue.shift();
        //visit node.data
        if(node.left){
            queue.push(node.left);
        }
        if(node.right){
            queue.push(node.right);
        }
    }
}
时间: 2024-10-29 19:11:06

二叉树的深度优先遍历和广度优先遍历的相关文章

二分搜索树的深度优先遍历和广度优先遍历

二分搜索树的特点 二分搜索树首先是一个二叉树,其次其必须满足的条件是:每个节点的键值必须大于其左子节点,每个节点的键值必须小于其右子节点,这样以左右孩子为根的子树仍为二分搜索树,需要注意的是,二分搜索树不一定是一颗完全二叉树. 深度优先遍历 深度优先遍历的基本思想:对每一个可能的分支路径深入到不能再深入为止,而且每个结点只能访问一次.深度优先遍历的非递归的通用做法是采用栈.要特别注意的是,二分搜索树的深度优先遍历比较特殊,可以细分为前序遍历.中序遍历.后序遍历. 前序遍历:先访问当前节点,再依次

基于邻接表存储的图的深度优先遍历和广度优先遍历

一.深度优先遍历是连通图的一种遍历策略.其基本思想如下: 设x是当前被访问顶点,在对x做过访问标记后,选择一条从x出发的未检测过的边(x,y).若发现顶点y已访问过,则重新选择另一条从x出发的未检测过的边,否则沿边(x,y)到达未曾访问过的y,对y访问并将其标记为已访问过:然后从y开始搜索,直到搜索完从y出发的所有路径,即访问完所有从y出发可达的顶点之后,才回溯到顶点x,并且再选择一条从x出发的未检测过的边.上述过程直至从x出发的所有边都已检测过为止. 例如下图中: 1.从0开始,首先找到0的关

基于邻接矩阵存储的图的深度优先遍历和广度优先遍历

图的存储结构相比较线性表与树来说就复杂很多,对于线性表来说,是一对一的关系,所以用数组或者链表均可简单存放.树结构是一对多的关系,所以我们要将数组和链表的特性结合在一起才能更好的存放. 那么我们的图,是多对多的情况,另外图上的任何一个顶点都可以被看作是第一个顶点,任一顶点的邻接点之间也不存在次序关系. 仔细观察以下几张图,然后深刻领悟一下: 因为任意两个顶点之间都可能存在联系,因此无法以数据元素在内存中的物理位置来表示元素之间的关系(内存物理位置是线性的,图的元素关系是平面的). 如果用多重链表

多级树的深度优先遍历与广度优先遍历(Java实现)

目录 多级树的深度优先遍历与广度优先遍历(Java实现) 节点模型 深度优先遍历 广度优先遍历 多级树的深度优先遍历与广度优先遍历(Java实现) 深度优先遍历与广度优先遍历其实是属于图算法的一种,多级树可以看做是一种特殊的图,所以多级数的深/广遍历直接套用图结构的遍历方法即可. 工程中后端通常会用多级树来存储页面表单的各级联动类目,本文提供了深度遍历与广度遍历的示例,在使用时只要根据你的业务需求稍加改动即可. 我们知道,遍历有递归,非递归两种方式.在工程项目上,一般是禁用递归方式的,因为递归非

C++ 二叉树深度优先遍历和广度优先遍历

二叉树的创建代码==>C++ 创建和遍历二叉树 深度优先遍历:是沿着树的深度遍历树的节点,尽可能深的搜索树的分支. //深度优先遍历二叉树void depthFirstSearch(Tree root){ stack<Node *> nodeStack; //使用C++的STL标准模板库 nodeStack.push(root); Node *node; while(!nodeStack.empty()){ node = nodeStack.top(); printf(format, n

二叉树深度优先遍历和广度优先遍历

对于一颗二叉树,深度优先搜索(Depth First Search)是沿着树的深度遍历树的节点,尽可能深的搜索树的分支.以上面二叉树为例,深度优先搜索的顺序 为:ABDECFG.怎么实现这个顺序呢 ?深度优先搜索二叉树是先访问根结点,然后遍历左子树接着是遍历右子树,因此我们可以利用堆栈的先进后出的特点, 现将右子树压栈,再将左子树压栈,这样左子树就位于栈顶,可以保证结点的左子树先与右子树被遍历. 广度优先搜索(Breadth First Search),又叫宽度优先搜索或横向优先搜索,是从根结点

转:二叉树的深度优先遍历和广度优先遍历

转自:http://www.blogjava.net/fancydeepin/archive/2013/02/03/395073.html 深度优先搜索算法(Depth First Search),是搜索算法的一种.是沿着树的深度遍历树的节点,尽可能深的搜索树的分支. 当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点.这一过程一直进行到已发现从源节点可达的所有节点为止. 如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为

由二叉树深度优先遍历和广度优先遍历 看人最大的敌人其实是自己

最大的敌人其实是自己 最近报了极客时间的21天打卡,今天是第七天周日,感觉周六的时候是最难坚持的,因为自己想要利用这个打卡复习一下算法训练营的内容,虽然参加了,并且最后毕业了,但是自己还是感觉对常用的算法和数据结构一知半解,一知半解的评价都有点高,应该是不怎么解,所以要复习和巩固一下 从递归开始,递归的最主要的思想就是: 找重复性,抵制人肉递归的诱惑 找到最近最简方法,将其拆解成可重复解决的问题(重复子问题) 数学归纳法思维 然后到树了,二叉树的前序.中序.后序遍历,其中需要使用到栈和队列,尤其

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

1 import java.util.ArrayDeque; 2 3 public class BinaryTree { 4 static class TreeNode{ 5 int value; 6 TreeNode left; 7 TreeNode right; 8 9 public TreeNode(int value){ 10 this.value=value; 11 } 12 } 13 14 TreeNode root; 15 16 public BinaryTree(int[] ar