遍历实现
/**
* 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<vector<int> > threeOrders(TreeNode* root) {
// write code here
if (root == NULL)
return vector<vector<int>>();
stack<TreeNode *> st;
vector<vector<int>> rsts;
vector<int> rst;
//前序
TreeNode* tempRoot = root;
while(!st.empty() || tempRoot){
while(tempRoot){
rst.push_back(tempRoot->val);
st.push(tempRoot->right);
tempRoot = tempRoot->left;
}
tempRoot = st.top();
st.pop();
}
rsts.push_back(rst);
rst.clear();
//中序
tempRoot = root;
while(!st.empty() || tempRoot){
while(tempRoot){
st.push(tempRoot);
tempRoot = tempRoot->left;
}
tempRoot = st.top();
rst.push_back(tempRoot->val);
st.pop();
tempRoot = tempRoot->right;
}
rsts.push_back(rst);
rst.clear();
//后续
tempRoot = root;
while(!st.empty() || tempRoot){
while(tempRoot){
rst.push_back(tempRoot->val);
st.push(tempRoot->left);
tempRoot = tempRoot->right;
}
tempRoot = st.top();
st.pop();
}
reverse(rst.begin(), rst.end());
rsts.push_back(rst);
return rsts;
}
};