题目地址:牛客
算法思想:
首先题目给出了一个数组,根据输出的结果知道,2是左孩子,1是根节点,3是右孩子,因此可以直接遍历这棵树,当根节点不为空的时候递归遍历即可;
最后的结果输出的是一个二维数组,意思是第一行为前序遍历的结果;第二行为后续遍历的结果;第三行为后序遍历的结果。根据测试框给出的样式,该二维数组使用的是vector变长数组结构,因此需要先定义三个不同的前中后的遍历数组,通过使用引用的方式,直接在遍历时修改其结果。
最后将这三个不同的前中后数组定义为二维变长数组即可。
代码:
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
#include <vector>
class Solution {
public:
/**
*
* @param root TreeNode类 the root of binary tree
* @return int整型vector<vector<>>
*/
void preorder(TreeNode * Root, vector<int> &data)
{
if(Root != NULL)
{
data.push_back(Root->val);
preorder(Root->left, data);
preorder(Root->right, data);
}
return;
}
void inorder(TreeNode* Root, vector<int> &data)
{
if( Root != NULL)
{
inorder(Root->left, data);
data.push_back(Root->val);
inorder(Root->right, data);
}
return;
}
void postorder(TreeNode* Root, vector<int> &data)
{
if(Root != NULL)
{
postorder(Root->left, data);
postorder(Root->right, data);
data.push_back(Root->val);
}
return;
}
vector<vector<int> > threeOrders(TreeNode* root) {
// write code here
vector<int> pre;
vector<int> in;
vector<int> post;
preorder(root, pre);
inorder(root, in);
postorder(root, post);
vector<vector<int> > res{
pre, in, post};
return res;
}
};```