// Source : https://oj.leetcode.com/problems/binary-tree-preorder-traversal/ // Author : Hao Chen // Date : 2014-07-21 /********************************************************************************** * * 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 #include #include #include #include using namespace std; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; vector preorderTraversal1(TreeNode *root); vector preorderTraversal2(TreeNode *root); vector preorderTraversal(TreeNode *root) { if (random()%2){ cout << "---method one---" << endl; return preorderTraversal1(root); } cout << "---method two---" << endl; return preorderTraversal2(root); } vector preorderTraversal1(TreeNode *root) { vector v; vector 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; } vector preorderTraversal2(TreeNode *root) { vector v; vector stack; stack.push_back((TreeNode*)NULL); TreeNode *top = root; while(top!=NULL){ v.push_back(top->val); if (top->right !=NULL){ stack.push_back(top->right); } if (top->left != NULL){ stack.push_back(top->left); } top = stack.back(); stack.pop_back(); } return v; } TreeNode* createTree(int a[], int n) { if (n<=0) return NULL; TreeNode **tree = new TreeNode*[n]; for(int i=0; ileft = tree[pos++]; if (posright = tree[pos++]; } } } return tree[0]; } void printTree_pre_order(TreeNode *root) { if (root == NULL){ //cout << "# "; return ; } cout << root->val << " "; printTree_pre_order(root->left); printTree_pre_order(root->right); } void printArray(vector v) { for(int i=0; i v = preorderTraversal(p); printArray(v); cout << endl; return 0; }