剑指offer 面试题23—从上往下打印二叉树

来源:互联网 发布:淘宝导入csv 编辑:程序博客网 时间:2024/06/04 19:19

题目:

从上往下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。


基本思想:

遍历不是先序、中序、后序中的一种。

规律:每一次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队里的末尾。接下来到队列的头部取出最早进入队列的节点,重复前面的打印操作。

#include <iostream>#include <deque>using namespace std;//二叉树结点定义typedef struct BiTreeNode{int data;//左右孩子指针struct BiTreeNode *lchild;struct BiTreeNode *rchild;}BiTreeNode,*BiTree;//按先序序列创建二叉树int CreateBiTree(BiTree &T){int data;//按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树cin>>data;if(data == -1){T = NULL;}else{T = (BiTree)malloc(sizeof(BiTreeNode));T->data = data;//生成根结点CreateBiTree(T->lchild);//构造左子树CreateBiTree(T->rchild);//构造右子树}return 0;}void foo(BiTree T){if(!T)return;deque<BiTree> dequeTreeNode;dequeTreeNode.push_back(T);while(dequeTreeNode.size()){BiTree p = dequeTreeNode.front();//返回容器c的第一个元素的引用。如果c为空,则该操作为空dequeTreeNode.pop_front();//删除头部数据cout<<p->data<<" ";if(p->lchild)dequeTreeNode.push_back(p->lchild);if(p->rchild)dequeTreeNode.push_back(p->rchild);}}void main(){BiTree T;CreateBiTree(T);foo(T);}


0 0
原创粉丝点击