【100题】第十六题(层序打印树的节点)

一,题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入

8
/ \
6 10
/ \ / \
5 7 9 11

输出:8 6 10 5 79 11。

二,分析:

本题主要考察树的层序遍历,最常用的方法就是采用队列的形式。

按照,根左右的形式依次将元素弹入队列中。然后取出队列头部,再将头部的左右子树弹入队列中。这样就可以层序遍历整个二叉树。有些类似树的广度优先查找。

三,源码:

#include "stdio.h" #include "malloc.h" #include "stack.h" struct node { int data; node *right; node *left; }; node *root; void insert(node *&root,int data) { if(root==NULL) { printf("%d\n",data); root=(node*)malloc(sizeof(node)); root->data=data; root->right=NULL; root->left=NULL; } else { if(root->data<data)//要插入的数据 data大于节点 则插入右边 insert(root->right,data); else insert(root->left,data); } } node *creatTree(int a[],int n) { int i; for(i=0;i<n;i++) insert(root,a[i]); return root; } void leveltree(node *root)//层序遍历 { if(!root) return; deque<node*> dequelist; //双端都可以插入的队列 dequelist.push_back(root); //插入一个元素到队列的尾部 while(dequelist.size()) { node* pnode=dequelist.front();//获取队列的头 dequelist.pop_front();//弹出队列的头 printf("data=%d\n",pnode->data); if(pnode->left) dequelist.push_back(pnode->left); //若有左子树,把它的左子树压入队列中 if(pnode->right) dequelist.push_back(pnode->right); //若有右子树,把它的右子树压入队列中 } } int main() { int a[]={8,6,5,7,10,9,11}; root=creatTree(a,7); leveltree(root);//采用循环的方式 return 0; }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值