【剑指offer】广度优先遍历二叉树

问题:从上往下打印出二叉树的每个节点,同层节点从左至右打印。

*思路:先用队列存放树的根结点。每次出队一个结点,将结点非空的左右孩子分别入队。重复此过程,直到队列为空。

 1 import java.util.ArrayList;
 2 /**
 3 public class TreeNode {
 4     int val = 0;
 5     TreeNode left = null;
 6     TreeNode right = null;
 7
 8     public TreeNode(int val) {
 9         this.val = val;
10
11     }
12
13 }
14 */
15
16
17 public class Solution {
18
19     public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
20       ArrayList<TreeNode> queue = new ArrayList<TreeNode>();
21       ArrayList<Integer> result = new ArrayList<Integer>();
22       //非空处理
23       if(root==null){ return result;}
24     //初始化
25       queue.add(root);
26       result.add(root.val);
27       while(!queue.isEmpty()){
28         TreeNode node = queue.remove(0);
29         TreeNode left = node.left;
30         TreeNode right = node.right;
31         if(left!=null){
32             queue.add(left);
33             result.add(left.val);
34         }
35         if(right!=null){
36             queue.add(right);
37             result.add(right.val);
38         }
39       }
40         return result;
41     }
42 }

原文地址:https://www.cnblogs.com/singular/p/10048952.html

时间: 2024-08-30 05:50:06

【剑指offer】广度优先遍历二叉树的相关文章

剑指OFFER之重建二叉树(九度OJ1385)

题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行为一个整数n(1<=n<=1000):代表二叉树的节点个数. 输入的第二行包括n个整数(其中每个元素a的范围为(1<=a<=1000)):代表二叉树的前序

剑指Offer:重建二叉树【7】

剑指Offer:重建二叉树[7] 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回. 分析 我们首先要明白前序和中序构建二叉树的流程,流程理解了才是解题的关键: 如上图所示,前序遍历可以找到头结点,然后在中序遍历中找到它的位置 比如,1的位置为i,那么startIn~i-1就是它的左子树的中序遍历,st

[剑指offer]8.重建二叉树

题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列. 代码 /*--------------------------------------- * 日期:2015-07-20 * 作者:SJF0115 * 题目: 8.重建二叉树 * 结果:AC * 网址:http://www.nowcoder

【Java】 剑指offer(37) 序列化二叉树

本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请实现两个函数,分别用来序列化和反序列化二叉树. 思路 一般情况下,需要采用前/后序遍历和中序遍历才能确定一个二叉树,但是其实可以只采用前序遍历(从根结点开始),将空结点(null)输出为一个特殊符号(如“$”),就可以确定一个二叉树了. 将二叉树序列化为字符串,就是前序遍历的过程,遇见空结点时,序列化为“$”,每个结点间使用逗号分隔开. 将字符串反序列化为二叉树,也使用前

【剑指offer】序列化二叉树

题目链接:序列化二叉树 题意: 请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存.序列化可以基于先序.中序.后序.层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!). 二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树. 题解:这个题就是前序遍历,序列化二叉树

剑指offer:序列化二叉树

题目描述请实现两个函数,分别用来序列化和反序列化二叉树 # -*- coding: utf-8 -*- # @Time : 2019-07-07 15:48 # @Author : Jayce Wong # @ProjectName : job # @FileName : serializeBinaryTree.py # @Blog : https://blog.51cto.com/jayce1111 # @Github : https://github.com/SysuJayce class

【剑指offer】重建二叉树

题目:重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含童复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示的二叉树并输出它的头结点. 二叉树结点的定义如下: struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight; }; 创建根节点.前

[剑指Offer] 60.把二叉树打印成多行

题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. [思路]使用队列实现二叉树的层次遍历. 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 }; 10 */ 11 class Solution 12 { 13 public:

剑指OFFER之重建二叉树

题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行为一个整数n(1<=n<=1000):代表二叉树的节点个数. 输入的第二行包括n个整数(其中每个元素a的范围为(1<=a<=1000)):代表二叉树的前序

《剑指offer》:[58]二叉树的下一个结点

题目:给定一棵二叉树和其中一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针外,还有一个指向父节点的指针. 分析:这里已经说了是中序遍历,所以我们就以中序遍历为例.由于是二叉树,所以有三种情况: (1)如果如果一个结点有右子树,那么它的下一个结点就是它的右子树中最左子节点.也就是说从右子节点出发一直沿着指向左子结点的指针,我们就能找到它的 下一个结点. (2)如果这个结点没有右子树,如果结点是它父节点的左子树,则它的下一个结点就是它的父节点. (3)如果一个