Java 二叉树层次遍历

简介: 遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。

设L、D、R分别表示遍历左子树、访问根结点和遍历右子树, 则对一棵二叉树的遍历有几种情况:DLR(称为先序遍历),LDR(称为中序遍历),LRD (称为后序遍历),层次遍历。

**层次遍历:**按照层次访问,通常用队列来做。访问根,访问子女,再访问子女的子女(越往后的层次越低)(两个子女的级别相同)。

如图二叉树的层次遍历结果为: 3,9,20,15,7

代码实现:

public static void main(String[] args) {TreeNode root = new TreeNode(3);TreeNode n1 = new TreeNode(9);TreeNode n2 = new TreeNode(20);TreeNode n3 = new TreeNode(15);TreeNode n4 = new TreeNode(7);root.left = n1;root.right = n2;n2.left = n3;n2.right = n4;List<List<Integer>> rs = levelOrder(root);System.out.println(rs);
}public static List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> list = new LinkedList<List<Integer>>();if (root == null)return list;ArrayDeque<TreeNode> deque = new ArrayDeque<>();deque.addLast(root);while (!deque.isEmpty()) {int num = deque.size();List<Integer> subList = new LinkedList<Integer>();for (int i = 0; i < num; i++) {TreeNode node = deque.removeFirst();if (node.left != null) deque.addLast(node.left);if (node.right != null) deque.addLast(node.right);subList.add(node.val);}list.add(subList);}return list;
}

TreeNode.java文件:

public class TreeNode {public int val;public TreeNode left;public TreeNode right;public TreeNode(int x) {val = x;}public static int treeHeight(TreeNode root) {if (null == root) {return 0;}int l = treeHeight(root.left);int r = treeHeight(root.right);return (l > r) ? l + 1 : r + 1;}}

Java 二叉树层次遍历相关推荐

  1. [LeetCode] Binary Tree Level Order Traversal 二叉树层次遍历(DFS | BFS)

    目录: 1.Binary Tree Level Order Traversal - 二叉树层次遍历 BFS 2.Binary Tree Level Order Traversal II - 二叉树层次 ...

  2. 数据结构-二叉树层次遍历

    首先介绍下二叉树的层次遍历即按照顺序对树节点依次访问,如下图: 顺序遍历的结果为:ABCDEFGHIJK 我们可以借助一个队列来实现二叉树的层次遍历:思路如下: 先将二叉树根节点入队,然后出队,访问该 ...

  3. 二叉树层次遍历--广度遍历和深度遍历

    问题来源:二叉树层次遍历 问题描述:给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例子: 给定二叉树: [3,9,20,null,null,15,7], 3/ \9 ...

  4. 由序列确定二叉树:前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 代码实现(c语言)

    下面三种序列可以唯一的构造唯一的一棵二叉树: 前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 #include<stdio.h> #inc ...

  5. 树(二叉树层次遍历输出及二叉树前序遍历输入)

    前两篇解释了二叉树的有关逻辑概念及前中后序输出递归代码的实现,这篇将讲述二叉树层次遍历输出如何实现以及二叉树前序遍历输入的两种情况. 定义结构体 struct BiNode{char data;BiN ...

  6. 二叉树层次遍历:队列

    二叉树层次遍历 二叉树层次遍历的基本算法在本文中不提及.本文内容为,在二叉树层次遍历中,为何选用队列这样一种数据结构. 不使用额外数据结构 首先,假设我们不使用额外的数据结构,只使用 1 个指针: 访 ...

  7. (数据结构)二叉树层次遍历

    二叉树层次遍历 二叉树层次遍历的实现思想是:通过队列数据结构,从树的根结点开始,依次将其左孩子和右孩子入队:而后每次队列中一个结点出队,都将其左孩子和右孩子入队,直到树中所有结点都出队,出队结点的先后 ...

  8. 二叉树层次遍历c语言_[LeetCode] 107. 二叉树的层次遍历 II

    题目链接 : https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/ 题目描述: 给定一个二叉树,返回其节点值自底 ...

  9. 二叉树的层次遍历_【腾讯面试热身题】二叉树层次遍历(动画展示)

    二叉树的层次遍历同时涉及到树和队列两种数据结构的操作,因此大厂很喜欢用来作为面试的热身题.作者不少去腾讯的小伙伴,都反映,这种题一定要非常熟练,不然会被直接pass. 1 题目描述 给定一个二叉树,按 ...

  10. 二叉树层次遍历python_根据二叉树层序遍历顺序(数组),将其转换为二叉树(Python)...

    1.创建二叉树结点和值 class Node: def __init__(self, value): self.value = value self.left = None self.right = ...

最新文章

  1. 根据 JS 自动定义页面缩放比(根据分辨率进行适配)
  2. python编程语法-Python基础及语法(十三)
  3. 致盗窃,抄袭有三AI内容以及不可理喻的读者
  4. Leetcode题库 19.删除链表的倒数第N个结点(双指针法 C实现)
  5. 习题6-6 使用函数输出一个整数的逆序数 (20 分)
  6. JavaScript基础函数体中的唯一var模式(002)
  7. 如何在input输入框中加一个搜索的小图片_仿淘宝搜索栏
  8. WebSocket跨域问题解决
  9. 三菱PLC QCPU用户手册(功能解说/程序基础篇)
  10. android 大华电子秤波特率_大华条码秤对接经验总结
  11. _ASSERTE(_CrtIsValidHeapPointer(block))
  12. 病毒常用方法之隐身术
  13. 钉钉页面跳转_钉钉统一跳转协议
  14. Windows快捷键和基本DOS命令
  15. FPGA和外围接口-第一章 爱上FPGA(1.4 FPGA开源网站和论坛))
  16. SpringSecurity(一)
  17. 图的基本算法(单源最短路径)
  18. 阿里云dns 接口调用/代码
  19. 思岚科技—SLAMTEC将自家研发技术应用到更多行业中
  20. 奔向光明阿波罗(上)

热门文章

  1. Centos7 Redis安装
  2. natapp软件使用
  3. 青岛海洋超级计算机,青岛海洋科学与技术试点国家实验室
  4. 攻防世界——MISC——pdf
  5. 4600u黑苹果 r5_黑苹果集显hd4400、hd4600显卡Clover引导驱动方法教程
  6. 多看系统kindle最新版_更新到最新版微信后,我要吹爆这一功能!
  7. windows10桌面_32位windows10系统正式版推荐下载
  8. Linux修改http为https访问
  9. Mirth Connect 源码用eclipse启动
  10. 华为USG6000系列防火墙的Console密码重置过程