递归和非递归实现二叉树的前序遍历
来源:互联网 发布:nemo软件 编辑:程序博客网 时间:2024/06/05 03:02
非递归实现
建立一个栈,第一次把根结点指针压入栈,并打印结点数据值,然后将右子树根结点指针入栈,再将左子树根结点指针入栈,之后循环地从栈中读取指针,并打印结点数据值,压入右子树根结点和左子树根结点,直到栈空为止。。。由于是先将右子树根结点入栈,所以出栈时是左子树根结点先出,从而使得左子树根结点先被打印。代码如下:
<pre name="code" class="cpp">/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */vector<int> preorderTraversal(TreeNode *root) {vector<int> res;if (root == NULL) return res;stack<TreeNode *> ps;TreeNode* cur;ps.push(root);while (!ps.empty()){cur = ps.top();ps.pop();res.push_back(cur->val);if (cur->right != NULL)ps.push(cur->right);if (cur->left != NULL)ps.push(cur->left);}return res;}
递归实现
代码如下:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<int> preorderTraversal(TreeNode *root) { vector<int> res; preOrder(root,res); return res; }private: void preOrder(TreeNode *root, vector<int> &res){ if(root==NULL) return; res.push_back(root->val); preOrder(root->left,res); preOrder(root->right,res); }};
0 0
- 以二叉树的前序遍历为例,递归和非递归方式的实现
- 二叉树的前序,中序,后序遍历。用递归和非递归实现
- 43.递归和非递归俩种方法实现二叉树的前序遍历。
- 递归和非递归俩种方法实现二叉树的前序遍历
- 递归和非递归俩种方法实现二叉树的前序遍历
- 算法习题43:递归和非递归实现二叉树的前序遍历
- 递归和非递归实现二叉树的前序遍历
- 请用递归和非递归俩种方法实现二叉树的前序遍历。
- 二叉树的前序遍历---非递归实现
- 二叉树的前序遍历(递归+非递归)
- 二叉树的深度与广度遍历及前序遍历递归非递归实现
- 二叉树的遍历 前序 中序 后序 分别实现递归和非递归遍历方式
- 【二叉树】 前序、中序和后序的递归遍历与非递归遍历
- 二叉树 前序遍历的非递归实现 中序遍历的非递归实现 后序遍历的非递归实现 创建二叉树
- 二叉树的前、中、后遍历递归和非递归java实现
- 二叉树的前序遍历的递归实现与非递归实现
- 数据结构---二叉树的前序、中序、后序遍历的递归和非递归 实现(C++)
- 数据结构-二叉树的前序、中序、后序遍历的递归和非递归实现
- Android 图片获取:从服务器下载与缓存本地
- 猿辅导2017校园招聘笔试题 求和为0的最长连续子数组
- 信息摘要算法——MessageDigest类
- Linux基础知识
- php史上最全的正则表达式,供学习参考
- 递归和非递归实现二叉树的前序遍历
- Android 像素问题
- 【Java概念】java语言基础
- 排序算法(一)——快速排序法
- 数据库系统工程师
- AngularJs ng-change事件/指令
- ViewPager高度自适应
- 【测试】软件测试流程进阶----两年软件测试总结
- 学习MySQL_第三天_语言基础&数据定义功能