二叉树的中序遍历----递归、循环、以及空间复杂度O(1)解法
发布日期:2022-02-21 17:40:29
浏览次数:39
分类:技术文章
本文共 1775 字,大约阅读时间需要 5 分钟。
话不多说,前两种直接上代码:
递归方法:
void preOrder(TreeNode* root){ if(root != NULL){ preOrder(root->left); cout << root->val << " "; preOrder(root->right); }}
循环方法:
void preOrder(TreeNode* root){ if(root == NULL) return; stackS; TreeNode* node = root; while(node!=NULL || !S.empty()){ if(node != NULL)}{ // cout << node->val << " "; 先序遍历:在push时访问结点值 S.push(node); node = node->left; } else{ cout << node->val << " "; // 中序遍历:在弹出栈顶指针时访问 node = S.top()->right; S.pop(); } }}
上述两种方法,时间复杂度为O(nlgn),空间复杂度为O(n)
优化空间复杂度为O(1)的方法:利用线索二叉树的概念
如果不能用栈空间,一个明显的问题是:如何返回到父节点。
线索二叉树利用叶子节点中的左右空指针指向某种顺序遍历下的前驱节点或后继节点就可以。
步骤如下:
1. 如果当前节点的左孩子为空,则输出当前节点并将其右孩子作为当前节点。
2. 如果当前节点的左孩子不为空,在当前节点的左子树中找到当前节点在中序遍历下的前驱节点。 a) 如果前驱节点的右孩子为空,将它的右孩子设置为当前节点。当前节点(Cur)更新为当前节点的左孩子
注意(不是改变节点内容,而是把游标Cur继续行进到左孩子)。 b) 如果前驱节点的右孩子为当前节点,将它的右孩子重新设为空(恢复树的形状)。输出当前节点。当前节点更新为当前节点的右孩子。3. 重复以上1、2直到当前节点(Cur)为空。
画图示意:
图片和步骤来源:
具体代码如下:
void recoverTree(TreeNode *root)///这里是采用O(1)的算法 { if(root==NULL) return; TreeNode* pre=NULL; TreeNode* cur=root; while(cur) { if(cur->left==NULL) { cout<val; cur=cur->right; } else { pre=cur->left; while(pre->right!=NULL&&pre->right!=cur) pre=pre->right; if(pre->right==NULL) { pre->right=cur; cur=cur->left; } else { pre->right=NULL; cout< val; cur=cur->right; } } } }
转载地址:https://blog.csdn.net/weixin_40599276/article/details/100120601 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月13日 16时49分16秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
使用DataGrid动态绑定DropDownList
2019-04-27
DataGrid删除确认及Item颜色交替
2019-04-27
NetBeans配置Xdebug 远程调试PHP
2019-04-27
MediaWiki安装
2019-04-27
Squid安装
2019-04-27
如何查看当前Linux的版本
2019-04-27
Ubuntu安装Nginx
2019-04-27
Ubuntu 下安装thttpd Web服务器
2019-04-27
用thttpd做Web Server
2019-04-27
服务器端开发经验总结 Linux C语言
2019-04-27
将网站程序放在tmpfs下
2019-04-27
使用Nginx的proxy_cache缓存功能取代Squid
2019-04-27
nginx 反向代理,动静态请求分离,proxy_cache缓存及缓存清除
2019-04-27
nginx 的proxy_cache才是王道
2019-04-27
Nginx proxy_cache 使用示例
2019-04-27
Nginx源代码分析 - 日志处理
2019-04-27
使Apache实现gzip压缩
2019-04-27
Memcached在大型网站中应用
2019-04-27
Hadoop简要介绍
2019-04-27
squid中的X-Cache和X-Cache-Lookup的意义
2019-04-27