ACM - Java实现深度优先遍历和广度优先遍历(二)

简介: ACM - Java实现深度优先遍历和广度优先遍历(二)
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
/**
 * 深度优先遍历
 */
public class DeepFirstSort {
  public static void main(String[] args) {
    TreeNode head=new TreeNode(1);
    TreeNode second=new TreeNode(2);
    TreeNode three=new TreeNode(3);
    TreeNode four=new TreeNode(4);
    TreeNode five=new TreeNode(5);
    TreeNode six=new TreeNode(6);
    TreeNode seven=new TreeNode(7);
    head.rightNode=three;
    head.leftNode=second;
    second.rightNode=five;
    second.leftNode=four;
    three.rightNode=seven;
    three.leftNode=six;
    System.out.print("广度优先遍历结果:");
    new DeepFirstSort().BroadFirstSearch(head);
    System.out.println();
    System.out.print("深度优先遍历结果:");
    new DeepFirstSort().depthFirstSearch(head);
  }
  // 广度优先遍历是使用队列实现的
  public void BroadFirstSearch(TreeNode nodeHead) {
    if(nodeHead==null) {
      return;
    }
    Queue<TreeNode> myQueue=new LinkedList<>();
    myQueue.add(nodeHead);
    while(!myQueue.isEmpty()) {
      TreeNode node=myQueue.poll();
      System.out.print(node.data+" ");
      if(null!=node.leftNode) {
        myQueue.add(node.leftNode);    // 深度优先遍历,我们在这里采用每一行从左到右遍历
      }
      if(null!=node.rightNode) {
        myQueue.add(node.rightNode);
      }
    }
  }
  // 深度优先遍历
  public void depthFirstSearch(TreeNode nodeHead) {
    if(nodeHead==null) {
      return;
    }
    Stack<TreeNode> myStack=new Stack<>();
    myStack.add(nodeHead);
    while(!myStack.isEmpty()) {
      TreeNode node=myStack.pop();    //弹出栈顶元素
      System.out.print(node.data+" ");
      if(node.rightNode!=null) {
        myStack.push(node.rightNode);    //深度优先遍历,先遍历左边,后遍历右边,栈先进后出
      }
      if(node.leftNode!=null) {
        myStack.push(node.leftNode);
      }
    }   
  }
}

image.png

目录
相关文章
|
8月前
|
存储 监控 Java
《从头开始学java,一天一个知识点》之:数组入门:一维数组的定义与遍历
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。明日预告:《多维数组与常见操作》。 通过实例讲解数组的核心认知、趣味场景应用、企业级开发规范及优化技巧,帮助你快速掌握Java数组的精髓。
149 23
|
12月前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
4340 113
|
Java 程序员 编译器
Java|如何正确地在遍历 List 时删除元素
从源码分析如何正确地在遍历 List 时删除元素。为什么有的写法会导致异常,而另一些不会。
314 3
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
155 1
|
存储 算法 Java
Java一分钟之-数组的创建与遍历
数组作为Java中存储和操作一组相同类型数据的基本结构,其创建和遍历是编程基础中的基础。通过不同的创建方式,可以根据实际需求灵活地初始化数组。而选择合适的遍历方法,则可以提高代码的可读性和效率。掌握这些基本技能,对于深入学习Java乃至其他编程语言的数据结构和算法都是至关重要的。
98 6
|
域名解析 分布式计算 网络协议
java遍历hdfs路径信息,报错EOFException
java遍历hdfs路径信息,报错EOFException
151 3
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
293 4
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
195 0
|
存储 Java API
07 Java数组与数组操作(定义+遍历+排序+增删改查)(下)
07 Java数组与数组操作(定义+遍历+排序+增删改查)
113 4
|
Java 容器
07 Java数组与数组操作(定义+遍历+排序+增删改查)(上)
07 Java数组与数组操作(定义+遍历+排序+增删改查)
145 8
下一篇
开通oss服务