算法导论练习 10.4-5及12.1-3
//算法导论10.4-5及12.1-3 //1. 10.4-5 //给定一个n节点的二叉树,写出一个O(n)时间的非递归过程,将该树每个节点的关键 //字输出。要求除该树本身的存储空间外只能使用固定量的额外存储空间,且在过程中 //不得修改该树,及时暂时的修改也不允许。 //2. 12.1-3 //设计一个执行中序遍历的非递归程序(提示:一种容易的方法是使用栈作为辅助数据 //结构;另一种比较复杂但比较简洁的做法是不使用栈,但要假设能测试两个指针是否 //相等。) struct tree {int val;tree *left,*right,*parent; };void print(tree *x) {cout<<x->val<<" "; } //最简单的递归实现 void inorder_tree (tree *x) {if(!x) return;inorder_tree (x->left);print(x);inorder_tree (x->right); }//用栈辅助实习二叉树非递归遍历 //不需要使用父节点指针 stack<tree *> st; void inorder_tree_stack(tree* x) {while(x || !st.empty()) {//一路向左,不断将当前节点压入栈中while(x){st.push(x);x=x->left;}//取出栈顶元素,输出,并遍历其右节点x=st.top();st.pop();print(x);x=x->right;} } //非递归的中序遍历树,不用栈实现,但需要父节点指针 //一共有3种情况 //1. 访问左孩子 //2. 访问右孩子 //3. 如果是从右孩子返回,表明整棵子树已访问完,需要沿树而上寻找父节点。 // 直到是从左孩子返回,或者访问到根节点的父节点void inorder_tree_nostack(tree *x) {if(!x) return;tree *y=NULL;while(true){//访问左孩子if(y != x->left){while(x->left) x=x->left;}print(x);//访问右孩子if(x->right){x=x->right;continue;}//回溯do{y=x;x=x->parent;//访问到根节点的父节点(NULL)if(!x) return;}while(y == x->right);} }
转载于:https://www.cnblogs.com/blazebird/archive/2013/04/11/3015615.html
算法导论练习 10.4-5及12.1-3相关推荐
- 二叉树的遍历 《算法导论》10.4-1~10.4-3 10.4-5
10.4-1 那棵树就长成下面这个样子 /*1812 107 4 2 215*/ 下面就借用10.4-1提供的数据,构建一棵树,然后分别对它做10.4-2所要求的递归遍历和10.4-3所要求的非递归遍 ...
- 算法导论——lec 10 图的基本算法及应用
搜索一个图是有序地沿着图的边訪问全部定点, 图的搜索算法能够使我们发现非常多图的结构信息, 图的搜索技术是图算法邻域的核心. 一. 图的两种计算机表示 1. 邻接表: 这样的方法表示稀疏图比較简洁紧凑 ...
- 算法导论2nd 10.1-7
为什么80%的码农都做不了架构师?>>> 思路:两个队列q1和q2,两个队列指针pusher和poper分别指向q1和q2,push时调用pusher->enqueue, ...
- 算法导论第10章习题
10.1-1 略 10.1-2 把这个数组的头和尾各当成一个stack就好了,如果一个stack在push的过程中发现已经有值了就说明放满了. 10.1-3 略 10.1-4 ENQUE,DEQUE中 ...
- 算法导论 练习10.4-5二叉树的遍历
10.4-5 给定一个n结点的二叉树,写出一个O(n)O(n)O(n)时间的非递归过程,将该树的每一个结点的关键字输出.要求除该树本身的存储空间外只能使用固定量的额外存储空间,且中过程中不得修改该树, ...
- 带哨兵节点的链_【算法导论】10.2不带哨兵节点和带哨兵节点的双向链表
不带哨兵节点的双向链表即一般的双向链表,有一个头指针指向第一个节点,每个节点有key值和两个指针next和pre,分别指向前后相邻的节点,头结点的pre=NULL,尾节点的next=NULL,比较明了 ...
- 算法导论 练习12.1
12.1-1 对于关键字集合{1,4,5,10,16,17,21}\{1,4,5,10,16,17,21\}{1,4,5,10,16,17,21},分别画出高度为2.3.4.5和6的二叉搜索树. 这里 ...
- 算法导论之贪心算法(Huffman编码和拟阵)
贪心算法,在解决最优化问题上,通过得到子问题的局部最优解来合成问题的一个解,以局部最优选择来输出一个全局最优解. 问题要用贪心算法来求解,需满足和动态规划一样的最优子结构特征,同时还需要再每个子问题最 ...
- 算法导论:dfs深度优先搜索算法及基于dfs的拓扑排序以及宽度优先搜索算法bfs
1.dfs深度优先搜索算法 算法导论中是通过三种标记颜色来介绍dfs的,white代表还没被搜过,grey代表被搜了一些,还没结束,white表示已经搜索完成的状态. c/c++复现dfs代码 #in ...
最新文章
- 基于python的语料库数据处理电子版_基于 Python 自然语言处理工具包在语料库研究中的运用...
- 博鳌直击 | 大数据开发的最大障碍是什么?
- 【BZOJ 4103】 [Thu Summer Camp 2015]异或运算 可持久化01Trie
- python定义一个整数变量_python循环定义多个变量的实例分析
- Asp.net MVC3.0 入门指南 6 审视编辑方法和视图
- html img 能显示psd吗_教育一体机迈向大尺寸化,小间距显示屏能进入教室吗?
- kb2919355无法安装
- 详解大型分布式电商系统架构
- eda交通灯控制器波形输入_【EDA课程设计】基于VHDL十字路口交通灯控制电路
- a服务器读取b服务器文件乱码,java 读取oracle中文乱码
- button 和 input 的submit ,reset的区别
- No content to map to Object due to end of input
- python如何调用数学函数_Python_函数调用_数学函数_组合
- xp系统和win7系统哪个好
- Loj一本通刷题记录
- Python-pip 安装与使用
- 解决Microsoft Office SDX Helper服务占用率高
- 编程实现:任意输入英文的月份,在查找月份表后输出其对应的中文提示。缩写也可查找。
- C++初阶—STL简介
- 【c#视频】——面向对象——多态
热门文章
- 标准化条件变量 -- condition_variable
- 整理记录word2016小技巧,自用
- python在for循环中不能删除正在循环的列表(问题已解决)
- 向顺序容器vector、string、deque、list、forward_list中插入\删除元素时迭代器、引用、指针的变化
- 计算机网络:05---网络类型:局域网、城域网、广域网、个域网、无线网络
- DialogFragment的详细讲解以及优势
- 计算机职称在线考试报名系统,2020年计算机职称考试网上如何报名
- java.awt.headless 模式(Linux, java.awt.headless and the DISPLAY environment variable)
- python 之 前端初识 html
- Vue2+VueRouter2+webpack 构建项目实战(四)接通api,先渲染个列表