递归和非递归实现二叉树的前序遍历

来源:互联网 发布:nemo软件 编辑:程序博客网 时间:2024/06/05 03:02

非递归实现

建立一个栈,第一次把根结点指针压入栈,并打印结点数据值,然后将右子树根结点指针入栈,再将左子树根结点指针入栈,之后循环地从栈中读取指针,并打印结点数据值,压入右子树根结点和左子树根结点,直到栈空为止。。。由于是先将右子树根结点入栈,所以出栈时是左子树根结点先出,从而使得左子树根结点先被打印。代码如下:

<pre name="code" class="cpp">/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */
vector<int> preorderTraversal(TreeNode *root) {vector<int> res;if (root == NULL) return res;stack<TreeNode *> ps;TreeNode* cur;ps.push(root);while (!ps.empty()){cur = ps.top();ps.pop();res.push_back(cur->val);if (cur->right != NULL)ps.push(cur->right);if (cur->left != NULL)ps.push(cur->left);}return res;}


递归实现

代码如下:

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<int> preorderTraversal(TreeNode *root) {                vector<int> res;        preOrder(root,res);        return res;    }private:    void preOrder(TreeNode *root, vector<int> &res){        if(root==NULL) return;        res.push_back(root->val);        preOrder(root->left,res);        preOrder(root->right,res);            }};



0 0
原创粉丝点击