树的遍历
来源:互联网 发布:管家婆软件客户端 编辑:程序博客网 时间:2024/06/05 21:09
一、前序遍历
递归解法:
class Solution {public: /** * @param root: The root of binary tree. * @return: Preorder in vector which contains node values. */ vector preorderTraversal(TreeNode *root) { vector val_vec; traverse(root, val_vec); return val_vec; }private: void traverse(TreeNode *root, vector &ret) { if (root == NULL) { return; } ret.push_back(root->val); traverse(root->left, ret); traverse(root->right, ret); }};
非递归解法:
class Solution {public: /** * @param root: The root of binary tree. * @return: Preorder in vector which contains node values. */ vector preorderTraversal(TreeNode *root) { vector val_vec; stack s; if (root == NULL) { return val_vec; } s.push(root); while (!s.empty()) { const TreeNode *node = s.top(); s.pop(); val_vec.push_back(node->val); if (node->right != NULL) { s.push(node->right); } if (node->left != NULL) { s.push(node->left); } } return val_vec; }};
二、中序遍历
递归解法:
class Solution { /** * @param root: The root of binary tree. * @return: Inorder in vector which contains node values. */public: vector inorderTraversal(TreeNode *root) { vector result; traverse(root, result); return result; }private: void traverse(TreeNode *root, vector &ret) { if (root == NULL) { return; } traverse(root->left, ret); ret.push_back(root->val); traverse(root->right, ret); }};
非递归解法:
class Solution { /** * @param root: The root of binary tree. * @return: Inorder in vector which contains node values. */public: vector inorderTraversal(TreeNode *root) { vector result; stack s; while (!s.empty() || NULL != root) { if (root) { s.push(root); root = root->left; } else { root = s.top(); s.pop(); result.push_back(root->val); root = root->right; } } return result; }};
三、后序遍历
递归解法:
class Solution { /** * @param root: The root of binary tree. * @return: Postorder in vector which contains node values. */public: vector postorderTraversal(TreeNode *root) { vector result; traverse(root, result); return result; }private: void traverse(TreeNode *root, vector &ret) { if (root == NULL) { return; } traverse(root->left, ret); traverse(root->right, ret); ret.push_back(root->val); }};
非递归解法:
class Solution { /** * @param root: The root of binary tree. * @return: Postorder in vector which contains node values. */public: vector<int> postorderTraversal(TreeNode *root) { // write your code here stack<TreeNode*> s; vector<int> res; vector<bool> flag(1000); int i = 0; while (!s.empty() || root!=NULL) { if (root) { s.push(root); flag[i++] = 0; root = root->left; } else if (flag[i-1]==0) { root = s.top(); root = root->right; flag[i-1] = 1; } else { TreeNode* tmp = s.top(); res.push_back(tmp->val); s.pop(); i--; } } return res; }};
阅读全文
0 0
- 二叉树的遍历(层遍历和深度遍历)
- 二叉树的前序中序后序遍历,非递归遍历 层次遍历
- 二叉树的先中后序遍历,递归遍历,非递归遍历
- 二叉树遍历-----前序后序迭代遍历的新思路
- 二叉树的遍历-按层次遍历
- 二叉树的遍历(递归遍历)
- 二叉树的遍历-层次遍历
- 树的遍历
- 六、 树的遍历
- 二叉树的遍历
- haffman树的遍历
- 二叉树的遍历
- 树的各种遍历
- 树的遍历
- 二叉树的遍历
- C++树的遍历
- Java树的遍历
- 树的简单遍历
- 关于卫片美化卫星图美化卫星图色差化问题的解决方案
- js:利用for循环,输出1-10所有数的平方和(即1-10的阶乘)
- 《数据结构学习与实验指导》4-2:树种统计
- 二叉树的路径和
- Android使用httpclient访问http
- 树的遍历
- Java IO流
- Mybatis---原生态JDBC编程的问题
- Java+Selenium3方法篇25-isDisplayed方法
- jvm类加载
- Docker exec 命令
- 概率DP学习笔记(一)
- 牛顿迭代法
- 我的学习之路_第十八章_SQL语句