分别按照二叉树先序,中序和后序打印所有的节点。
先序:根左右
中序:左根右
后序:左右根
首先定义向量数组results[3],然后调用周游函数travel,判断条件使用根节点是否为空。
周游方式使用递归实现。
先序遍历:
1.判断根节点是否为空
【if(root)】
2.非空进入循环,输出根节点
【ret[0].push_back(root->val);】
3.左子树判定,有节点进行递归输出,没节点进行下一步
【travel(root->left,ret);】
4. 右子树判定,有节点进行递归输出,没节点结束周游函数,返回主函数
【travel(root->right,ret);】
中序遍历:
1.判断根节点是否为空
【if(root)】
2.非空进入循环,左子树判定,有节点进行递归输出,没节点进行下一步
【travel(root->left,ret);】
3.输出根节点
【ret[1].push_back(root->val);】
4. 右子树判定,有节点进行递归输出,没节点结束周游函数,返回主函数
【travel(root->right,ret);】
后序遍历:
1.判断根节点是否为空
【if(root)】
2.非空进入循环,左子树判定,有节点进行递归输出,没节点进行下一步
【travel(root->left,ret);】
3.右子树判定,有节点进行递归输出,没节点进行下一步
【travel(root->right,ret);】
4. 输出根节点,结束周游函数,返回主函数
【ret[2].push_back(root->val);】
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
*/
class Solution {
public:
void travel(TreeNode *root,vector<vector<int>> &ret){
if(root){
ret[0].push_back(root->val);
travel(root->left,ret);
ret[1].push_back(root->val);
travel(root->right,ret);
ret[2].push_back(root->val);
}
}
vector<vector<int> > threeOrders(TreeNode* root) {
vector<vector<int>>results(3);
travel(root,results);
return results;
}
};