深度遍历,即尽可能往树的纵深的方向搜索,所以优先深入遍历树的左节点,直至叶子节点,再往回遍历已遍历的节点的右节点。使用栈来实现
package com.practice;
import java.util.LinkedList;
public class DepthFirstSearch {
public static TreeNode createTree(int[] arr, int i) {
TreeNode root = null;
if(i<arr.length) {
root = new TreeNode(arr[i]);
root.left = createTree(arr, 2*i+1);
root.right = createTree(arr, 2*i+2);
}
return root;
}
public static void search(int[] arr) {
TreeNode root = createTree(arr, 0);
if(root==null) return;
LinkedList<TreeNode> list = new LinkedList<TreeNode>();
list.add(root);
while(!list.isEmpty()) {
TreeNode node = list.pop();
System.out.print(node.val+",");
if(node.right!=null) list.push(node.right);
if(node.left!=null) list.push(node.left);
}
}
public static void main(String[] args) {
int[] arr = { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 };
search(arr);
}
}
广度优先遍历,即层序遍历,优先将根节点遍历完,再遍历根节点的子节点。使用队列来实现
package com.practice;
import java.util.LinkedList;
import java.util.Queue;
public class WidthFirstSearch {
public static TreeNode createTree(int[] arr, int i) {
TreeNode root = null;
if(i<arr.length) {
root = new TreeNode(arr[i]);
root.left = createTree(arr, 2*i+1);
root.right = createTree(arr, 2*i+2);
}
return root;
}
public static void search(int[] arr) {
TreeNode root = createTree(arr, 0);
if(root==null) return;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
while(!queue.isEmpty()) {
int size = queue.size();
for(int i=0;i<size;i++) {
TreeNode node = queue.poll();
System.out.print(node.val+",");
if(node.left!=null) queue.add(node.left);
if(node.right!=null) queue.add(node.right);
}
}
}
public static void main(String[] args) {
int[] arr = { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 };
search(arr);
}
}
分享到:
相关推荐
总之,掌握二叉树的深度遍历和广度遍历是理解和应用数据结构的关键。通过学习这些基本操作,可以更好地解决实际问题,例如在搜索、排序、图论等领域。在实际编程中,理解并灵活运用这些方法,能够提高代码的效率和...
二叉树广度和深度优先遍历,通过递归算法实现二叉树的建立,利用递归算法实现深度优先遍历,使用队列实现广度优先遍历
二叉树的遍历分为两种主要方法:深度优先遍历和广度优先遍历。 1. 深度优先遍历(Depth-First Search, DFS): - 前序遍历(Preorder Traversal):首先访问根节点,然后递归地遍历左子树,最后遍历右子树。记作...
二叉树的遍历可以使用前序遍历、中序遍历、后序遍历和层次遍历等算法。 二叉树遍历算法有多种应用,包括求二叉树的高度、遍历二叉树、删除二叉树等。不同的遍历算法有其特点和应用场景,选择合适的遍历算法可以提高...
给定一个二叉树的数据结构,通过JavaScript实现二叉树的广度遍历和深度遍历。
在计算机科学领域,数据结构和算法是至关重要的基础,其中二叉树的遍历和图的遍历是经常被讨论的话题。本文将深入探讨这两个概念,以及与之相关的停车场课程设计和迷宫递归算法。 首先,我们来理解二叉树的遍历。...
二叉树遍历和图遍历是数据结构与算法领域中的重要概念,广泛应用于软件开发、计算机科学教学以及各种计算问题的求解。本系统旨在通过动态演示来帮助理解和掌握这两种遍历方法,并且提供了完整的C语言算法描述,以...
二叉树的遍历是指按照特定顺序访问每个节点的过程,主要有三种基本遍历方法:前序遍历、中序遍历和后序遍历。 1. **前序遍历**(Preorder Traversal):首先访问根节点,然后递归地遍历左子树,最后遍历右子树。用...
根据给定的文件信息,我们将深入探讨二叉树遍历的几种主要方式:广度优先遍历(BFS)和深度优先遍历(DFS),其中包括前序遍历、中序遍历和后序遍历。 ### 广度优先遍历(BFS) 广度优先遍历是一种按层次顺序访问...
二叉树深度优先遍历、广度优先遍历{非递归}
本篇文章将重点关注广度优先搜索,即“二叉树遍历广度优先”。 广度优先搜索(BFS)是一种在图或树中寻找路径的算法,它从根节点开始,然后逐层地访问所有相邻节点。在二叉树中,这意味着从根节点开始,先访问所有...
总之,二叉树遍历和计算深度是数据结构与算法的基础,它们不仅对理解二叉树至关重要,也是解决许多计算机科学问题的基石。通过深入学习和实践,你可以提高解决问题的能力,并为更高级的算法和数据结构打下坚实基础。
总结来说,理解和掌握二叉树的深度优先遍历和广度优先遍历对于进行数据结构和算法的学习至关重要。通过Java实现这些遍历方法,不仅能够加深对二叉树的理解,还能为解决实际问题提供基础。在实际开发中,如文件系统的...
在二叉树中,深度优先遍历有三种主要的方式:前序遍历、中序遍历和后序遍历。 1. **前序遍历**(Pre-order Traversal) - **定义**:前序遍历的顺序为“根节点 -> 左子树 -> 右子树”。 - **应用场景**:通常用于...
在计算机科学中,图是一种数据结构,用于表示对象之间的关系,可以用来建模现实世界中的各种复杂系统。...通过阅读和分析这些代码,可以更深入地理解非递归算法在深度优先遍历和广度优先遍历中的具体实现。
Java实现二叉树的深度优先遍历和广度优先遍历算法示例 本文主要介绍了Java实现二叉树的深度优先遍历和广度优先遍历算法,结合实例形式详细分析了二叉树的定义、深度优先遍历与广度优先遍历算法原理与相关操作实现...
二叉树的遍历和线索化是理解和操作二叉树的关键技术。本篇将深入探讨这两大主题。 首先,我们来讨论二叉树的遍历。遍历二叉树是指按照特定顺序访问每个节点的过程。主要有三种常见的遍历方法: 1. **前序遍历...
深度优先搜索是一种遍历二叉树的方式,它沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点 v 的所有边都己被探寻过,搜索将回溯到发现节点 v 的那条边的起始节点。这一过程一直进行到已发现从源节点可达的...
二叉树有三种常见的遍历方式:前序遍历、中序遍历和后序遍历。在`TREE.C`中,可能会实现这三种遍历方法。前序遍历顺序为根节点 -> 左子树 -> 右子树;中序遍历顺序为左子树 -> 根节点 -> 右子树;后序遍历顺序为左...
它的遍历是理解和操作二叉树的基础,这其中包括前序遍历、中序遍历、后序遍历以及层次遍历(也称为广度优先搜索)。 1. 前序遍历:前序遍历的顺序是“根-左-右”,即首先访问根节点,然后递归地访问左子树,最后...