二叉树的前序、中序、后续遍历,用递归方法很好写,代码很精简,但是之前也学习过。递归方法实际上都是依托 栈来实现的,所以二叉树的前、中、后序遍历也均可以使用 栈来实现。 以下,分别给出递归 以及 使用迭代(栈)实现二叉树 前中后序遍历的代码。因为递归方法都比较简单,就不过多赘述,主要是迭代法的实现,需要一点技巧(尤其是 中序遍历)。
144. 二叉树的前序遍历
前序遍历比较简单一点,很容易想到。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
/*
class Solution {
public:
void traversal(TreeNode *node, vector<int> &res)
{
if(node == nullptr)
return;
res.push_back(node->val);
traversal(node->left, res);
traversal(node->right, res);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
traversal(root, res);
return res;
}
};
*/
/*------------------------------
递归方法
-------------------------------*/
/*
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root)
{
if(root == nullptr)
return res;
res.push_back(root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
return res;
}
private:
vector<int> res;
};
*/
/*----------------------------------------
利用栈来实现
----------------------------------------*/
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root)
{
vector<int> res;
stack<TreeNode *> record;
if(root == nullptr)
return res;
record.push(root