LeetCode: Binary Tree Preorder Traversal 非递归版
2014-03-20 14:55
411 查看
没想到非递归的先序遍历对我来说也蛮有挑战性的...
基本思想是从非递归后续遍历改进而来。仍然使用栈作为临时存储区,区别是mark只有0和1两种。
mark=0,代表第一次访问该结点,于是访问+左孩子进栈+mark自增1
mark=1,代表第二次访问该结点,于是出栈该结点+右孩子进栈
基本思想是从非递归后续遍历改进而来。仍然使用栈作为临时存储区,区别是mark只有0和1两种。
mark=0,代表第一次访问该结点,于是访问+左孩子进栈+mark自增1
mark=1,代表第二次访问该结点,于是出栈该结点+右孩子进栈
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { struct Tuple { //自定义结构 int mark; TreeNode* ptr; Tuple(int m, TreeNode* p): mark(m), ptr(p) {} }; public: vector<int> preorderTraversal(TreeNode *root) { vector<int> vec; if (root == NULL) return vec; else { vector<Tuple> stack; stack.push_back(Tuple(0, root)); while (!stack.empty()) { Tuple& temp = stack.back(); //使用引用访问栈顶元素 switch (temp.mark) { case 0: vec.push_back(temp.ptr->val); //访问当前结点 ++(temp.mark); 、、mark自增 if (temp.ptr->left != NULL) stack.push_back(Tuple(0, temp.ptr->left)); //左孩子进栈 break; case 1: stack.pop_back(); //当前结点出栈 if (temp.ptr->right != NULL) stack.push_back(Tuple(0, temp.ptr->right)); //右孩子进栈 break; } } return vec; } } };
相关文章推荐
- LeetCode Binary Tree Preorder Traversal 前序遍历二叉树 递归和非递归解法
- [LeetCode] Binary Tree Preorder Traversal [递归版]
- LeetCode:Binary Tree Preorder Traversal(非递归方法前序遍历二叉树)
- LeetCode-Construct Binary Tree from Preorder and Inorder Traversal-前序中序恢复二叉树-递归
- 【leetcode】非递归先序遍历二叉树(Binary Tree Preorder Traversal)
- [leetcode] Binary Tree Preorder Traversal 非递归先序遍历
- [LeetCode] Binary Tree Preorder Traversal (非递归的先序遍历)
- 【LeetCode】Binary Tree Preorder Traversal 二叉树前序遍历递归以及非递归算法
- leetcode_105题——Construct Binary Tree from Preorder and Inorder Traversal(树,递归)
- leetcode之Binary Tree Preorder Traversal (前序),中序,后续。非递归,递归
- leetcode_144题——Binary Tree Preorder Traversal(二叉树,递归,栈的使用)
- LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal
- Construct Binary Tree from Preorder and Inorder Traversal -- LeetCode
- Construct Binary Tree from Preorder and Inorder Traversal ---LeetCode
- 【leetcode】Binary Tree Preorder Traversal (middle)★
- 【LeetCode】Binary Tree Preorder Traversal
- LeetCode刷题笔录 Binary Tree Preorder Traversal
- LeetCode:Binary Tree Preorder Traversal(二叉树的先序遍历)
- [LeetCode] Binary Tree Preorder Traversal
- LeetCode | Construct Binary Tree from Preorder and Inorder Traversal