Binary Tree Inorder Traversal & Preorder Traversal
来源:互联网 发布:gabrielle名字 知乎 编辑:程序博客网 时间:2024/05/17 06:38
Given a binary tree, return the preorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3}
,
1 \ 2 / 3
return [1,2,3]
.
Note: Recursive solution is trivial, could you do it iteratively?
Recursive:
- /**
- * Definition for binary tree
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
- * };
- */
- class Solution {
- public:
- void preorder(TreeNode* root, vector<int> &path)
- {
- if(root!=NULL)
- {
- path.push_back(root->val);
- preorder(root->left, path);
- preorder(root->right, path);
- }
- }
- vector<int> preorderTraversal(TreeNode *root) {
- // IMPORTANT: Please reset any member data you declared, as
- // the same Solution instance will be reused for each test case.
- vector<int> path;
- preorder(root, path);
- return path;
- }
- };
Iterative:
- vector<int> preorderTraversal(TreeNode *root) {
- // IMPORTANT: Please reset any member data you declared, as
- // the same Solution instance will be reused for each test case.
- vector<int> path;
- stack<TreeNode*> stk;
- while(root != NULL || !stk.empty())
- {
- if(root != NULL)
- {
- while(root)
- {
- path.push_back(root->val);
- stk.push(root);
- root=root->left;
- }
- }
- else{
- root = stk.top()->right;
- stk.pop();
- }
- }
- return path;
- }
- vector<int> preorderTraversal(TreeNode *root) {
- // IMPORTANT: Please reset any member data you declared, as
- // the same Solution instance will be reused for each test case.
- vector<int> path;
- stack<TreeNode*> stk;
- if(root != NULL)
- {
- stk.push(root);
- while(!stk.empty())
- {
- root = stk.top();
- stk.pop();
- path.push_back(root->val);
- if(root->right) stk.push(root->right);
- if(root->left) stk.push(root->left);
- }
- }
- return path;
- }
其他两种非递归的遍历算法:
中序遍历-非递归:
- vector<int> InOrderTraversal(TreeNode *root) {
- // IMPORTANT: Please reset any member data you declared, as
- // the same Solution instance will be reused for each test case.
- vector<int> path;
- stack<TreeNode*> stk;
- while(root != NULL || !stk.empty())
- {
- while(root != NULL)
- {
- stk.push(root);
- root = root->left;
- }
- if( !stk.empty())
- {
- root = stk.top();
- stk.pop();
- root = root->right;
- }
- }
- return path;
- }
后序遍历-非递归:
- struct TNode{
- //TreeNode* root;
- int val;
- TNode *left;
- TNode *right;
- bool isVisited;
- TNode(int a):val(a),left(NULL),right(NULL),isVisited(false){};
- };
- vector<int> PostOrderTraversal(TNode *root) {
- // IMPORTANT: Please reset any member data you declared, as
- // the same Solution instance will be reused for each test case.
- vector<int> path;
- stack<TNode*> stk;
- if(root != NULL)
- {
- root->isVisited = false;
- stk.push(root);
- }
- TNode* cur = NULL;
- while(!stk.empty())
- {
- cur = stk.top();
- if(cur->isVisited)
- {
- path.push_back(cur->val);
- stk.pop();
- }else{
- cur->isVisited=true;
- if(cur->right)
- {
- cur->right->isVisited = false;
- stk.push(cur->right);
- }
- if(cur->left)
- {
- cur->left->isVisited = false;
- stk.push(cur->left);
- }
- }
- }
- return path;
- }
0 0
- Binary Tree Inorder Traversal & Preorder Traversal
- Binary Tree Preorder Traversal & Binary Tree Inorder Traversal
- 144. Binary Tree Preorder Traversal &&94. Binary Tree Inorder Traversal
- 【LeetCode】Binary Tree Preorder &Inorder & Postorder Traversal
- LeeCode Binary Tree Preorder ,inorder ,postorder Traversal
- LeetCode--Binary Tree Traversal ( Inorder, Preorder, PostOrder)
- Binary Tree Traversal(Preorder, Inorder, Postorder )
- Binary Tree Inorder/Preorder/Postorder Traversal(Java)
- Binary Tree Preorder Traversal & Binary Tree Inorder Traversal & Binary Tree Postorder Traversal
- leetcode Binary Tree Preorder Traversal Binary Tree Postorder Traversal Inorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- php查漏补缺之变量(一)
- Linux CPU Utilization
- 互联网系统架构的演进
- android4.0新控件Switch方法解析
- Linux 设备驱动 如何自动创建设备文件
- Binary Tree Inorder Traversal & Preorder Traversal
- 题目1128:求平均年龄
- hdu 1114 Piggy-Bank (完全背包)
- ubuntu下安装 weka
- 驱动第九天
- NoSQL和HBase
- Next Permutation 下一个排列
- 什么是回调函数
- 3步把您的java程序转换为webservice