分别按照二叉树先序,中序和后序打印所有的节点。
/**
* 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<>>
*/
//先序列:根、左、右
void preOrders(TreeNode* root,vector<int> *res){
if(root== nullptr)
return;
res->push_back(root->val);
TreeNode* left = root->left;
if(left!=nullptr){
preOrders(left,res);
// res->push_back(left->val);
}
TreeNode* right = root->right;
if(right!=nullptr){
preOrders(right,res);
// res->push_back(right->val);
}
}
//中序 左 根 右
void centerOrders(TreeNode* root,vector<int> *res){
if(root== nullptr)
return;
TreeNode* left = root->left;
if(left!=nullptr){
centerOrders(left,res);
// res->push_back(left->val);
}
res->push_back(root->val);
TreeNode* right = root->right;
if(right!=nullptr){
centerOrders(right,res);
// res->push_back(right->val);
}
}
//后序 左 右 根
void postOrders(TreeNode* root,vector<int> *res){
if(root== nullptr)
return;
TreeNode* left = root->left;
if(left!=nullptr){
postOrders(left,res);
// res->push_back(left->val);
}
TreeNode* right = root->right;
if(right!=nullptr){
postOrders(right,res);
// res->push_back(right->val);
}
res->push_back(root->val);
}
vector<vector<int> > threeOrders(TreeNode* root) {
// write code here
vector<int> pre = vector<int>();
vector<int> center = vector<int>();
vector<int> post = vector<int>();
if(root != nullptr){
preOrders(root,&pre);
centerOrders(root,¢er);
postOrders(root,&post);
}
vector<vector<int>> all = vector<vector<int>>();
all.push_back(pre);
all.push_back(center);
all.push_back(post);
return all;
}
};