剑指offer——面试题32:从上到下打印二叉树

void BFS(BinaryTreeNode* pRoot)
{
    if(pRoot==nullptr)
    {
        cout<<"empty binary tree!"<<endl;
        return;
    }
    queue<BinaryTreeNode*>pNode;
    pNode.push(pRoot);
    while(!pNode.empty())
    {
        BinaryTreeNode* pFront=pNode.front();
        pNode.pop();
        cout<<pFront->m_Value<<‘ ‘;
        if(pFront->m_pLeft!=nullptr)
            pNode.push(pFront->m_pLeft);
        if(pFront->m_pRight!=nullptr)
            pNode.push(pFront->m_pRight);
    }
    cout<<endl;
}

函数

 1 #include"BinaryTree.h"
 2
 3 void Test()
 4 {
 5     BFS(nullptr);
 6     BinaryTreeNode* pNode1=CreateBinaryTreeNode(8);
 7     BFS(pNode1);
 8     BinaryTreeNode* pNode2=CreateBinaryTreeNode(6);
 9     ConnectTreeNodes(pNode1,pNode2,nullptr);
10     BFS(pNode1);
11     ConnectTreeNodes(pNode1,nullptr,pNode2);
12     BFS(pNode1);
13     BinaryTreeNode* pNode3=CreateBinaryTreeNode(10);
14     ConnectTreeNodes(pNode1,pNode2,pNode3);
15     BFS(pNode1);
16 }
17
18 int main()
19 {
20     Test();
21     return 0;
22 }

测试代码

原文地址:https://www.cnblogs.com/acm-jing/p/10430269.html

时间: 2024-11-08 13:32:49

剑指offer——面试题32:从上到下打印二叉树的相关文章

【剑指Offer】22、从上往下打印二叉树

题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 题解:LinkedList模拟队列 1 public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { 2 ArrayList<Integer> list = new ArrayList<>(); 3 if (root == null) { 4 return list; 5 } 6 LinkedList<TreeNode> que

剑指offer(三十七)之从上往下打印二叉树

题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路分析:使用两个LIST,一个存放节点,一个存放值.先将根节点加入到LIST中,然后遍历LIST中的元素,遍历过程中,访问该元素的左右节点,再将左右子节点加入到LIST中来 <span style="font-family:SimSun;font-size:18px;color:#3333ff;">import java.util.ArrayList; /** public class TreeNode {

剑指offer系列源码-从上往下打印二叉树

从上往下打印出二叉树的每个节点,同层节点从左至右打印. #include <iostream> #include<stdio.h> #include<deque> using namespace std; struct BinaryTreeNode{ int value; BinaryTreeNode* left; BinaryTreeNode* right; }; void printFromTopToBottom(BinaryTreeNode* root){ if(

二叉树层次遍历(剑指Offer面试题32:从上到下打印二叉树)

图1所示为二叉树的层次遍历,即按照箭头所指方向,按照1.2.3的层次顺序,对二叉树每个节点进行访问 (此图反映的是自左至右的层次遍历,自右至左的方式类似). 要进行层次遍历,需要建立一个队列.先将二叉树头节点入队列,然后出队列,访问该节点, 如果它有左子树,则将左子树的根结点入队:如果它有右子树,则将右子树的根结点入队.然后出队列,对出队节点访问, 如此反复直到队列为空为止. 1 import java.util.*; 2 class TreeNode 3 { 4 int val; 5 Tree

剑指offer——32从上到下打印二叉树

题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 题解: 就是简单的层序遍历 1 class Solution { 2 public: 3 vector<int> PrintFromTopToBottom(TreeNode* root) { 4 vector<int>res; 5 BFS(root, res); 6 return res; 7 } 8 void BFS(TreeNode *root, vector<int>&res) 9 { 10

面试题:从上往下打印二叉树

题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印. 树的按层遍历 思路:辅助队列保存每个节点的子节点值 import java.util.ArrayList; import java.util.Queue; import java.util.LinkedList; public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer&

剑指Offer面试题32(java版):从1到n整数中1出现的次数

题目:输入一个整数n,求从1到n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1的数字有1,10,11,和12,1一共出现了5次. 方法一:不考虑时间效率的解法,靠它拿到Offer有点难: 如果在面试的时候碰到这个问题,应聘者大多能想到最直观的方法,也就是累加1到n中每个整数1出现的次数.我们可疑每次通过对10求余数判断整数的个位数字是不是1.如果这个数字大于10,除以10之后再判断个位数字是不是1.基于这个思路,我们写出下面的代码: /** * 从1到n整数中1出现的

剑指Offer面试题25(Java版):二叉树中和为某一值的路径

题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶结点所经过的所有的结点形成一条路径. 如下图,输入二叉树和整数22,则打印出两条路径,第一条路径包含结点10,12,第二条路径包含的结点为10,5,7. 一般的数据结构和算法的教材都没有介绍树的路径,因此对大多数应聘者而言,这是一个新概念,也就很难一下子想出完整的解题思路.这个时候我们可以试着从一两个具体的例子入手,找到规律. 以图中的二叉树为例分析,由于路径是从根节点出发到叶结点,也就是说

剑指Offer面试题39(Java版):二叉树的深度

题目:输入一棵二叉树的根节点,求该数的深度.从根节点到叶结点依次进过的结点(含根,叶结点)形成树的一条路径,最长路径的长度为树的深度. 例如,如下图的二叉树的深度为4,因为它从根节点到叶结点的最长的路径包含4个结点(从根结点1开始,经过2和结点5,最终到达叶结点7) 我们可以从另一种角度来理解树的深度.如果一棵树只有一个结点,它的深度为1,如果根节点只有左子树而没有右子树,那么树的深度应该是其左子树的深度+1.同样如果根节点只有右子树而没有左子树,那么树的深度应该是其右子树+1.如果既有左子树又