非递归二叉树的序列打印

来源:互联网 发布:好吃的面 知乎 编辑:程序博客网 时间:2024/06/05 19:01

请用非递归方式实现二叉树的先序、中序和后序的遍历打印。

给定一个二叉树的根结点root,请依次返回二叉树的先序,中序和后续遍历(二维数组的形式)。

/*struct TreeNode {    int val;    struct TreeNode *left;    struct TreeNode *right;    TreeNode(int x) :            val(x), left(NULL), right(NULL) {    }};*/class TreeToSequence {public:    vector<vector<int> > convert(TreeNode* root) {        vector<vector<int> > res;        vector<int> tmp;                 preorder(root,tmp);        res.push_back(tmp);        tmp.clear();                 midorder(root,tmp);        res.push_back(tmp);        tmp.clear();                 posorder(root,tmp);        res.push_back(tmp);        return res;    }    // 先序遍历      void preorder(TreeNode* root,vector<int> &tmp){        if(root==NULL) return ;        stack<TreeNode*> s;        s.push(root);        while(!s.empty()){            TreeNode* cur=s.top();            tmp.push_back(cur->val);            s.pop();            if(cur->right!=NULL)                s.push(cur->right);            if(cur->left!=NULL)                s.push(cur->left);        }    }    // 中序遍历      void midorder(TreeNode* root,vector<int> &tmp){        if(root==NULL) return ;        stack<TreeNode*> s;        TreeNode* cur=root;        while(!s.empty()||cur!=NULL){            if(cur!=NULL){                s.push(cur);                cur=cur->left;            }else{                cur=s.top();                tmp.push_back(cur->val);                s.pop();                cur=cur->right;            }        }    }    // 后序遍历    void posorder(TreeNode* root,vector<int> &tmp){        if(root==NULL) return ;        stack<TreeNode*> s1;        stack<TreeNode*> s2;        s1.push(root);        while(!s1.empty()){            TreeNode* cur=s1.top();            s2.push(cur);            s1.pop();            if(cur->left!=NULL)                s1.push(cur->left);            if(cur->right!=NULL)                s1.push(cur->right);        }        while(!s2.empty()){            tmp.push_back(s2.top()->val);            s2.pop();        }    }};


阅读全文
0 0
原创粉丝点击