[LeetCode]144 二叉树先序遍历

来源:互联网 发布:美国网络恐怖组织 编辑:程序博客网 时间:2024/05/19 17:52

Binary Tree Preorder Traversal(二叉树先序遍历)

【难度:Medium】
Given a binary tree, return the preorder traversal of its nodes’ values.

For example:
Given binary tree {1,#,2,3},
这里写图片描述
return [1,2,3].

Note: Recursive solution is trivial, could you do it iteratively?
使用迭代而不是递归的方法来先序遍历二叉树。


解题思路

对于递归的方法来先序遍历二叉树相信大家都不陌生,而本题要求使用迭代来遍历,就有点难度了。这里我们可以使用栈来记录中间经历的树节点,代码大体是使用while循环来替代递归方法。


c++代码如下:

//迭代方法/** * Definition for a binary tree node. * 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> v;        stack<TreeNode*> s;        TreeNode* cur = root;        while (cur || !s.empty()) {            if (cur) {                //当前节点压栈                s.push(cur);                //先序,先记录根节点的值                v.push_back(cur->val);                //走左边                cur = cur->left;            } else {                //走右边                cur = s.top()->right;                s.pop();            }        }        return v;    }};
//递归方法/** * Definition for a binary tree node. * 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> v;        if (!root) {            return v;        }        v.push_back(root->val);        vector<int> tmp = preorderTraversal(root->left);        if (!tmp.empty()) {            for (int i = 0; i < tmp.size(); i++) {                v.push_back(tmp[i]);            }        }        vector<int> tmp2 = preorderTraversal(root->right);        if (!tmp2.empty()) {            for (int i = 0; i < tmp2.size(); i++) {                v.push_back(tmp2[i]);            }        }        return v;    }};
0 0
原创粉丝点击