博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(剑指Offer)面试题23:从上到下打印二叉树
阅读量:5310 次
发布时间:2019-06-14

本文共 1597 字,大约阅读时间需要 5 分钟。

题目:

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

思路:

很明显,这是一个广度优先遍历。

需要一个队列容器来保存结点,具体操作:

1、将根结点压入队列中,并打印根结点;如果根结点有子结点,将左右子结点依次压入队列的尾部;

2、如果队列不为空,从队列头部取出结点,重复步骤1,直至队列为空。

推广:

不管是广度优先遍历一个有向图还是一棵树,都要用到队列;

第一步就把起始结点(对树而言是根节点)放入队列中;接下来每一次从队列的头部取出一个结点,遍历这个结点之后把从它能到达的结点(对树而言是子结点)都依次放入队列;重复这个遍历过程,直到队列中的结点全部被遍历为止。

代码:

struct TreeNode{    int val;    TreeNode* left;    TreeNode* right;};void PrintFromTopToBottom(TreeNode* root){    if(root==NULL)        return;    std::deque
dequeTree; dequeTree.push_back(root); TreeNode* node; while(!dequeTree.empty()){ node=dequeTree.front(); dequeTree.pop_front(); printf("%d ",node->val); if(root->left) dequeTree.push_back(root->left); if(root->right) dequeTree.push_back(root->right); }}

在线测试OJ:

http://www.nowcoder.com/books/coding-interviews/7fe2212963db4790b57431d9ed259701?rp=1

AC代码:

class Solution {public:    vector
PrintFromTopToBottom(TreeNode *root) { std::vector
data; if(root!=NULL){ std::deque
dequeTreeNode; dequeTreeNode.push_back(root); TreeNode* node; while(!dequeTreeNode.empty()){ node=dequeTreeNode.front(); dequeTreeNode.pop_front(); data.push_back(node->val); if(node->left) dequeTreeNode.push_back(node->left); if(node->right) dequeTreeNode.push_back(node->right); } } return data; }};

  

转载于:https://www.cnblogs.com/AndyJee/p/4651379.html

你可能感兴趣的文章
为什么需要ObjectDataProvider
查看>>
Eclipse(非J2EE版本)配置Extjs环境以及安装部署Tomcat
查看>>
网页中搜索框效果原理。
查看>>
SpringBoot实战 之 异常处理篇
查看>>
【转】【OPenGL】opengl 64位 配置 freeglutx64下载
查看>>
Bootstrap 基础
查看>>
设计模式 之 工厂模式
查看>>
哈夫曼树及解码
查看>>
七大技巧保护无线网络,蹭网卡什么的都是浮云!
查看>>
Sql数据库收缩 语句特别快
查看>>
生成四位随机数的PHP代码
查看>>
Cocos2d-x 2.x 升级为 3.x 常见变化纪录
查看>>
Memcached
查看>>
项目启动报错java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind
查看>>
Cassandra 的Custom Codecs
查看>>
去掉UIToolBar上面的shadowImage
查看>>
DP---最长公共子序列
查看>>
#100天计划# 2013年9月27日
查看>>
HDU-2086 A1 = ?
查看>>
主站点~~~~
查看>>