leetcode_c++:栈:Binary Tree Preorder Traversal(144)

来源:互联网 发布:购买医疗医疗器械软件 编辑:程序博客网 时间:2024/05/08 16:11

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].


递归


#include <stdio.h>#include <stdlib.h>#include<time.h>#include<iostream>#include<vector>#include<stack>#include<algorithm>using namespace std;struct TreeNode {      int val;      TreeNode *left;      TreeNode *right;      TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {private:    void orderHelper(vector<int> &res,TreeNode* cur){        if(!cur)            return;        res.push_back(cur->val);        if(cur->left)            orderHelper(res,cur->left);        if(cur->right)            orderHelper(res,cur->right);    }public:    vector<int> preorderTraversal(TreeNode* root) {        vector<int> res;        orderHelper(res,root);        return res;    }};TreeNode* createTree(int a[],int n){    if(n<=0)  return NULL;    TreeNode** tree=new TreeNode* [n];    for(int i=0;i<n;i++){        if(a[i]==0){            tree[i]=NULL;            continue;        }        tree[i] = new TreeNode(a[i]);    }    int pos=1;    for(int i=0;i<n && pos<n;i++){        if(tree[i]){            tree[i]->left=tree[pos++];            if(pos<n)                tree[i]->right=tree[pos++];        }    }    return tree[0];}void printfTree_pre_order(TreeNode* root){    if(root==NULL)        return;    cout<<root->val<<" ";    printfTree_pre_order(root->left);    printfTree_pre_order(root->right);}void printArray(vector<int> v){    for(int i=0;i<v.size();i++)        cout<<v[i]<<" ";    cout<< endl;}int main(){    Solution st;    int a[]={1,2,3,4,5,0,6,0,0,7,8,9,0};    TreeNode* p=createTree(a,sizeof(a)/sizeof(int));    printfTree_pre_order(p);    cout<<endl;    vector<int> v=st.preorderTraversal(p);    printArray(v);    cout<<endl;    return 0;}

迭代


/** * 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;        vector<TreeNode* > stack;        if(root)            stack.push_back(root);        while(stack.size()>0){            TreeNode* n=stack.back();            v.push_back(n->val);            stack.pop_back();            if(n->right)                stack.push_back(n->right);            if(n->left)                stack.push_back(n->left);        }        return v;    }};
0 0
原创粉丝点击