二叉树的层次遍历以及用层次遍历算法显示所有叶子节点

设计要求:任意选定一棵至少含有8个结点的二叉树,编程实现:(1)按层次遍历算法遍历该二叉树,并给出遍历结果;(2)利用层次遍历算法显示所有叶结点。... 设计要求:任意选定一棵至少含有8个结点的二叉树,编程实现:(1)按层次遍历算法遍历该二叉树,并给出遍历结果;(2)利用层次遍历算法显示所有叶结点。 展开
 我来答
匿名用户
2013-07-18
展开全部
#include <iostream>
using namespace std;
struct segtree{int a,b;} tree[10001];
void buildtree(int l,int r,int root = 0) //建树 { tree[root].a=l; tree[root].b=r; if (l==r) return; int mid=(l+r)>>1; root<<=1; buildtree(l,mid,root+1); buildtree(l,mid,root+2);}
void dfs(int level,int root = 0){ for (int i=1;i<level;i++) cout<<' '; cout<<"Lv"<<level<<" : ["<<tree[root].a<<","<<tree[root].b<<"]\n"; if (tree[root].a!=tree[root].b) { root<<=1; dfs(level+1,root+1); dfs(level+1,root+2); }}
struct {int root,level;} st[100001];
void bfs(){ int top=1,first=0; st[first].root=0; st[first].level=1; while (first<top) { for (int i=st[first].level;i>1;i--) cout<<' '; cout<<"Lv"<<st[first].level<<" : ["<<tree[st[first].root].a<<","<<tree[st[first].root].b<<"]\n"; if (tree[st[first].root].a!=tree[st[first].root].b) { st[top].root=st[first].root*2+1; st[top++].level=st[first].level+1; st[top].root=st[first].root*2+2; st[top++].level=st[first].level+1; } first++; }}
int main(){ int t,i; cout<<"以[1,9]线段树为例,生成一个二叉树。\n\n"; buildtree(1,9); cout<<"以深度遍历该树(深搜):\n"; dfs(1); cout<<"以深度遍历该树(宽搜):\n"; bfs(); system("pause"); return 0;}
百度网友4b95330
2018-04-12 · TA获得超过225个赞
知道小有建树答主
回答量:344
采纳率:82%
帮助的人:51.7万
展开全部
算法非常奇特
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-07-18
展开全部
数据结构
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式