/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类 the root of binary tree
* @return int整型vector<vector<>>
*/
// 定义三个一维数组
vector<int> pre;
vector<int> in;
vector<int> pos;
// 递归函数一
void preorder(TreeNode* root)
{
if(root != nullptr)
{
pre.push_back(root->val);
preorder(root->left);
preorder(root->right);
}
}
// 递归函数二
void inorder(TreeNode* root)
{
if (root != nullptr)
{
inorder(root->left);
in.push_back(root->val);
inorder(root->right);
}
}
// 递归函数三
void posorder(TreeNode* root)
{
if (root != nullptr)
{
posorder(root->left);
posorder(root->right);
pos.push_back(root->val);
}
}
// 迭代函数一(使用了一个栈)
void preorder2(TreeNode* root)
{
if (root != nullptr)
{
stack<TreeNode*> stk1;
stk1.push(root);
while(!stk1.empty())
{
root = stk1.top(); // 用root方便进行表示
pre.push_back(root->val);
stk1.pop();
if (root->right != nullptr)
stk1.push(root->right);
if (root->left != nullptr)
stk1.push(root->left);
}
}
}
// 迭代函数二(使用了一个栈)
void inorder2(TreeNode* root)
{
if (root != nullptr)
{
stack<TreeNode*> stk1;
while(!stk1.empty() || root != nullptr)
{
if (root != nullptr)
{
stk1.push(root);
root = root->left;
}
else
{
root = stk1.top();
in.push_back(root->val);
stk1.pop();
root = root->right;
}
}
}
}
// 迭代函数三(使用了两个栈)
void posorder2(TreeNode* root)
{
if (root != nullptr)
{
stack<TreeNode*> stk1;
stack<TreeNode*> stk2; // 第二个栈起到了反序的作用
stk1.push(root);
while(!stk1.empty())
{
root = stk1.top();
stk2.push(root);
stk1.pop();
if (root->left != nullptr)
stk1.push(root->left);
if (root->right != nullptr)
stk1.push(root->right);
}
while(!stk2.empty())
{
pos.push_back(stk2.top()->val);
stk2.pop();
}
}
}
vector<vector<int> > threeOrders(TreeNode* root) {
// write code here
// 二维数组的操作
vector<vector<int>> res;
preorder2(root);
res.push_back(pre);
inorder2(root);
res.push_back(in);
posorder2(root);
res.push_back(pos);
return res;
}
};