《算法导论》笔记 第10章 10.4 有根树的表示
2014-04-16 18:28
465 查看
【笔记】
用二叉数表示有多个子女的树:left[x]表示最左边的儿子,right[x]右边的兄弟。【练习】
10.4-1 画出由下列域表示的、根在下标6处的二叉树。10.4-2 请写出一个O(n)时间的递归过程,在给定含n个结点的二叉树后,它可以将树中的每个结点的关键字输出来。
void dfs(int x){ printf("%d ",key[x]); if (l[x]) dfs(l[x]); if (r[x]) dfs(r[x]); }
10.4-3 请写出一个O(n)时间的非递归过程,将给定的n结点二叉树中每个结点的关键字输出来。可以利用栈作为辅助数据结构。
void output(int rt){ stack<int>s; s.push(rt); while (!s.empty()) { int t = s.top(); s.pop(); printf("%d ",key[t]); if (r[t]) s.push(r[t]); if (l[t]) s.push(l[t]); } }
10.4-4 对于任意的用左孩子、右兄弟表示存储的、含n个结点的有根树,写出一个O(n)时间过程来输出每个结点的关键字。
void dfsTree(int rt) { printf("%d ",key[rt]); for (int i=l[rt];i!=0;i=r[i]) dfsTree(i); }
*10.4-5 写出一个O(n)时间的非递归过程,输出给定的含n个结点的二叉树中每个结点的关键字。要求只能使用除树本身以外固定量的额外存储空间,而且在过程中不能修改该树,哪怕是暂时的。
*10.4-6 在任意有根树的左孩子,右兄弟表示中,每个结点有三个指针:left-child,right-sibling和parent。从任意结点出发,都可以在常数时间内到达其父结点;可以在与子女数成线性关系的时间内到达其孩子。说明如何在每个结点内用两个指针和一个布尔值,在与子女数成线性关系的时间内到达其父亲或所有孩子。
相关文章推荐
- NODE-WEBKIT教程(6)NATIVE UI API 之MENU(菜单)
- unable to convert MySQL date/time value to System.DateTime
- 《算法导论》笔记 第10章 10.4 有根树的表示
- wikioi天梯之3117 高精度练习之乘法
- 好的学习博客
- 每日灵感
- 每周工作
- linux 忘记root密码解决办法
- 将博客搬至CSDN
- ads 编译 和axd 调试 的使用
- 【转载】Fedora 15/16 gnome3 设置系统代理和yum代理
- fedora 下配置dvd yum源
- 小猴子下落 Java
- ubuntu12.04.4下安装python模块gevent
- 界面卡掉了的解决方法
- cvFindContours 获取轮廓中的所有点
- 在线学习
- Camera 的 yuv420sp 转 rgb
- 什么是网页原子设计模式(Atomic Design)
- MFC的对话框中使用OpenGL绘图