struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
class TreeToSequence {
vector<int> preOrder(TreeNode * root){
vector<int>ans;
stack<TreeNode *> s;
TreeNode * cur = root;
if(cur)
s.push(cur);
while (!s.empty()) {
cur = s.top();
s.pop();
ans.push_back(cur->val);
if(cur->right)
s.push(cur->right);
if(cur->left)
s.push(cur->left);
}
return ans;
}
vector<int> Inorder(TreeNode * root){
TreeNode * cur = root;
vector<int>ans;
stack<TreeNode *>s;
if(cur){
s.push(cur);
cur = cur->left;
}
while (!s.empty()||cur) {
if(cur){
s.push(cur);
cur = cur->left;
}
else
{
TreeNode * node = s.top();
s.pop();
ans.push_back(node->val);
cur = node ->right;
}
}
return ans;
}
vector<int> postOrder(TreeNode *root){//可以用一个辅助栈实现,但是稍微复杂 这里未写出
stack<TreeNode *> inputStack,outputStack;
vector<int>ans;
TreeNode * cur = root;
if(cur)
inputStack.push(cur);
while (!inputStack.empty()) {
cur = inputStack.top();
inputStack.pop();
outputStack.push(cur);
if(cur->left)
inputStack.push(cur->left);
if(cur->right)
inputStack.push(cur->right);
}
while (!outputStack.empty()) {
cur = outputStack.top();
outputStack.pop();
ans.push_back(cur->val);
}
return ans;
}
public:
vector<vector<int> > convert(TreeNode* root) {
vector<vector<int>> ans;
ans.push_back(preOrder(root));
ans.push_back(Inorder(root));
ans.push_back(postOrder(root));
return ans;
}
};
前中后序遍历二叉树的非递归实现
最新推荐文章于 2021-03-15 18:29:02 发布