博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【二叉树遍历】中序
阅读量:6710 次
发布时间:2019-06-25

本文共 2230 字,大约阅读时间需要 7 分钟。

记录下可以用的中序遍历方法

 

方法1:

vector
InOrderTraverse(TreeNode * root) //中序遍历 { vector
ans; TreeNode* p; vector
Stack; Stack.push_back(root); while(!Stack.empty()) { while((p = Stack.back()) != NULL) Stack.push_back(p->left); Stack.pop_back(); if(!Stack.empty()) { p = Stack.back(); Stack.pop_back(); ans.push_back(p->val); Stack.push_back(p->right); } } return ans; }

方法2:

vector
inorderTraversal(TreeNode *root) { vector
vector; stack
stack; TreeNode *pCurrent = root; while(!stack.empty() || pCurrent) { if(pCurrent) { stack.push(pCurrent); pCurrent = pCurrent->left; } else { TreeNode *pNode = stack.top(); vector.push_back(pNode->val); stack.pop(); pCurrent = pNode->right; } } return vector; }

 

我按照自己的思路写的,调了很多遍。关键是右子树弹出时候的逻辑混乱

vector
inorderTraversal(TreeNode *root) { vector
ans; vector
v; TreeNode * p; if(root == NULL) return ans; v.push_back(root); while(!v.empty()) { p = v.back(); while(p->left != NULL) //找到最左边的 { v.push_back(p->left); p = p->left; } ans.push_back(p->val); //压入数据 v.pop_back(); while(p->right == NULL) //右子树处理 如果当前的右子树是空的 那么需要弹出v中栈尾的数值 { if(!v.empty()) { p = v.back(); ans.push_back(p->val); v.pop_back(); } else { break; } } if(p->right != NULL) { v.push_back(p->right); } } return ans; }

 

还有不需要栈的方法,利用了线索二叉树的概念,空间复杂度O(1)

转载地址:http://htalo.baihongyu.com/

你可能感兴趣的文章
Lua的文件操作
查看>>
更好的以太坊,会是怎样的?
查看>>
计算与推断思维 六、可视化
查看>>
阿里建“猫茂”线下购物中心,将实现新零售技术的真正落地
查看>>
高等教育转型:确保数据可用性是关键
查看>>
【基础】这15种CSS居中的方式,你都用过哪几种?
查看>>
网站的通用注册原型设计
查看>>
硬纪元AI峰会实录|公子小白严汉明:这是智能机器人最好的时代
查看>>
CES Asia专题|臻迪携“高颜值”家族集体亮相
查看>>
验证码对抗之路及现有验证机制介绍
查看>>
canvas绘制星空
查看>>
bootstrap大图轮播手机端不能手指滑动解决办法
查看>>
转置字符串,其中单词内的字符需要正常
查看>>
Spring的lookup-method标签
查看>>
抽象类、接口
查看>>
第十章 网络文件共享服务之ftp
查看>>
Spring的事件和监听器
查看>>
服务器开发入门——理解异步I/O
查看>>
8Manage装配式一体化管理如何解决集成窘境
查看>>
[翻译]Axure-Masters-原型设计工具Axure学习-第2.2节
查看>>