递归三序遍历二叉树
实现二叉树先序,中序和后序遍历
http://www.nowcoder.com/questionTerminal/a9fec6c46a684ad5a3abd4e365a9d362
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
private:
vector<vector<int>> res;
vector<int> ans;
public:
void PreOrder(TreeNode* root) {
if (root == NULL) //递归终止条件
return;
else {
ans.push_back(root->val);
PreOrder(root->left);
PreOrder(root->right);
}
}
void InOrder(TreeNode* root) {
if (root == NULL)
return;
else {
InOrder(root->left);
ans.push_back(root->val);
//cout << root->val;//自测输出,判断是否出错
InOrder(root->right);
}
}
void PostOrder(TreeNode* root) {
//ans.clear();//ans容器的清空,一定不能放在递归函数之内,否则会在每次递归时,将遍历后保存的数据清空,导致最后容器内空无一物。
if (root == NULL)
return ;
else {
PostOrder(root->left);
PostOrder(root->right);
ans.push_back(root->val);
//cout << root->val;/自测输出
}
}
vector<vector<int> > threeOrders(TreeNode* root) {
// write code here
if (root == NULL)
return res;
PreOrder(root);
res.push_back(ans);
ans.clear();//每次利用ans之前,需要将其清空,否则会将之前所得的循序保存
InOrder(root);
res.push_back(ans);
ans.clear();
PostOrder(root);
res.push_back(ans);
return res;
}
};


