二叉树非递归遍历实现
来源:互联网 发布:淘宝旺旺引流神器 编辑:程序博客网 时间:2024/06/09 18:10
后序遍历
思路:
1. 将根节点的全部左子树入栈。
2. 取栈顶元素,如果其右子树为空或者上次已经访问,则弹出。(因为左子树全部入栈只需要考虑右子树)
3. 如果右子树 不为空,则入栈重复1。
vector<int> postorderTraversal(TreeNode *root) { stack<TreeNode*> s; vector<int> v; TreeNode *p; TreeNode *r = NULL;//上次访问的结点 p = root; if(!root) return v; while(p||!s.empty()){ while(p){ s.push(p); p = p->left; } p = s.top(); if(!p->right||p->right == r){ s.pop(); r = p; v.push_back(p->val); p = NULL; }else{ p = p->right; } } return v; }
前序遍历:
思路:
1. 入栈根节点
2. 弹出栈顶元素,如果根节点的右结点存在,则先放入右结点,如果根节点的左结点存在,再放入左结点
3. 重复2,直到栈为空
vector<int> preorderTraversal(TreeNode *root){ stack<TreeNode*> s; vector<int> v; TreeNode *t; s.push(root); if(!=root) return v; while(!s.empty()){ t = s.top(); s.pop(); v.push_back(t); if(t->right) s.push(t->right); if(t->left ) s.push(t->left); } return v;}
中序遍历:
思路:
1. 将当前结点(开始为根节点)左结点全部入栈
2. 弹出栈顶元素,如果栈顶元素的右结点存在,则执行1(此时当前结点为右节点)。不存在则执行2.
vector<int> orderTraversal(TreeNode * root){ stack<TreeNode*> s; vector<int> v; TreeNode *p; p = root; while(p||!s.empty()){ while(p){ s.push(p); p = p->left; } p = s.top(); v.push(p->val); s.pop(); if(p->right) p = p->right; p = NULL; } return v;}
阅读全文
0 0
- 二叉树遍历非递归实现
- 二叉树遍历非递归实现
- 非递归实现二叉树的遍历
- 二叉树遍历 非递归 C++实现
- 非递归实现二叉树的遍历
- 二叉树遍历非递归实现
- 二叉树遍历非递归实现
- 二叉树遍历非递归实现
- 二叉树遍历非递归实现
- 二叉树遍历非递归实现
- 二叉树遍历之非递归实现
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树遍历--非递归实现
- leetcode 二叉树遍历非递归实现
- 二叉树的非递归遍历实现
- 二叉树遍历的非递归实现
- 文件操作,及文件操作时的权限设置,快速实现文件拷贝,C语言常用IO函数
- 210. Course Schedule II
- 洛谷 P2017 [USACO09DEC]晕牛Dizzy Cows
- opencv-python实现图像的读取,显示与写入
- 三分钟读懂TT猫分布式、微服务和集群之路
- 二叉树非递归遍历实现
- 从Java反射机制到Android注解框架
- 数据库的类型以及由来
- Java注解知识点总结
- Linux C 多文件编译
- TensorFlow官方文档中文版-笔记(六)
- Mysql-5.7.20-winx64的安装和配置
- Java JVM 3: ClassLoading&Initialization
- CentOS7.4 系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境