LeetCode - Binary Tree Preorder Traversal

来源:互联网 发布:新网域名自助管理平台 编辑:程序博客网 时间:2024/04/30 06:33

Binary Tree Preorder Traversal

Given a binary tree, return the preorder traversal of its nodes' values.

For example:
Given binary tree {1,#,2,3},

   1    \     2    /   3

return [1,2,3].

Note: Recursive solution is trivial, could you do it iteratively?

#include <iostream>#include <vector>#include <stack>using namespace std;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) {    if (!root)return vector<int>();    TreeNode *trace = root;    vector<int> result;    stack<TreeNode *> st;    result.push_back(trace->val);    bool leftFlag = true;    while (trace) {if (trace->left && leftFlag) {    st.push(trace);    trace = trace->left;            result.push_back(trace->val);}else if (trace->right) {    trace = trace->right;            result.push_back(trace->val);}else {    if (st.empty()) {trace = NULL;continue;    }    trace = st.top();    st.pop();    leftFlag = false;    continue;}leftFlag = true;    }    return result;}};int main(){    TreeNode *head = new TreeNode(1);    TreeNode *node1 = new TreeNode(2);    TreeNode *node2 = new TreeNode(3);        head->right = node1;    node1->left = node2;    Solution * ss = new Solution();    vector<int> res = ss->preorderTraversal(head);    for (int i = 0; i < res.size(); ++i) {cout << res[i] << endl;    }    return 0;}


0 0
原创粉丝点击