链表后序遍历算法实现C++
来源:互联网 发布:普华永道审计知乎 编辑:程序博客网 时间:2024/06/04 19:29
一、节点定义
struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};
二、递归写法
记录一下用于返回的vector的定义位置
class Solution {public: vector<int> value; //一定要定义成全局变量, //否则后面返回的只是函数体里最后一个递归函数定义的value, //那只是整个value的一部分 vector<int> postorderTraversal(TreeNode *root) { if(!root){ return value; } value = postorderTraversal(root->left);//左 value = postorderTraversal(root->right);//右 value.push_back(root->val);//本身节点访问 return value; } void print(vector<int> value){ vector<int>::iterator it; for(it=value.begin();it!=value.end();it++) cout<<*it<<","; cout<<endl; }};
三、非递归写法
class Solution {public: vector<int> value; vector<int> postorderTraversal(TreeNode *root) { if(!root){ return value; } stack<TreeNode *> sta; TreeNode *r = root;//当前被操作的节点 TreeNode *pre = root;//记录刚被访问过的节点 while( r || !sta.empty() ){ //沿着左子树找到最左节点,边找边依次入栈 while(r){ sta.push(r); r = r->left; } while( !sta.empty() ){ r = sta.top(); //存在右结点且没被访问 if(r->right && pre != r->right){ r = r->right;//转到右子树 //在右子树上找到最左节点,并依次入栈 while(r){ sta.push(r); r = r->left; } }else{//不存在右结点或者右结点已经被访问了,即可将当前节点弹栈并访问 sta.pop(); value.push_back(r->val); pre = r;//更新刚被访问过的节点 } } //之前的while循环已经把所有节点都遍历了, //这里不置空的话就跳不出最外层循环 r = NULL; } return value; }
四、验证
int main() { TreeNode *a = new TreeNode(1); TreeNode *b = new TreeNode(2); TreeNode *c = new TreeNode(3); a->right = b; b->left = c; Solution slt; vector<int> value; value = slt.postorderTraversal(a); slt.print(value); return 0;}
0 0
- 深度、广度优先遍历算法C实现
- Morris Traversal算法遍历BST c实现
- 深度、广度优先遍历算法C实现
- 链表后序遍历算法实现C++
- 二叉树后序遍历非递归算法(C/C++语言实现)
- 二叉树中序遍历非递归算法(C/C++语言实现)
- 二叉树先序遍历非递归算法(C/C++语言实现)
- 【算法】二叉树的递归遍历C语言实现
- 第十一周项目三C/C++图遍历算法实现
- 图遍历算法实现
- 图遍历算法实现
- 图遍历算法实现
- 深度优先遍历与广度优先遍历算法的C语言实现
- [算法]图算法之骑士遍历问题(象棋中马的遍历问题)分析,C语言实现
- 遍历二叉树的递归算法与非递归算法以及C语言实现
- C/C++:各种基本算法实现小结(四)—— 图及其遍历
- 二叉排序树节点的删除(C++,算法导论),前中后序遍历(递归/非递归,栈实现),按层次遍历(队列实现)
- C语言实现二叉树的常用的算法(递归与非递归实现遍历)
- Oracle中获取系统时间与格式化日期
- HDFS权限说明
- 快速幂
- LLMNR欺骗工具Responder
- 模板内容抽出
- 链表后序遍历算法实现C++
- Mat对象的初始化和一些相关操作函数
- php初学
- 【读过的书,留下的迹】高性能MySQL(第3版)
- JSP-EL语法详解及实例
- linux IPtable防火墙 禁止和开放端口
- php 跨域设置
- Android 电子书应用完全开源代码
- 公告:友情提示