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 do it iteratively?
The recursive approach is simple:
1vector<int> Preordertraversal (TreeNode *root)2 {3vector<int>Vtree;4 preorder (vtree, root);5 returnVtree;6 }7 8 voidPreorder (vector<int> &vtree, TreeNode *root)9 {Ten if(Root = =NULL) One return; AVtree.push_back (root->val); -Preorder (Vtree, root->Left ); -Preorder (Vtree, root->Right ); the}
For non-recursive methods, a stack is needed to temporarily store the tree node
1) If current node p isn't empty, visit it and put P->right in stack, then P = P->left
2) Else, get the top node in stack
1vector<int> Preordertraversal (TreeNode *root)2 {3vector<int>Vtree;4Stack<treenode *>Stree;5TreeNode *visit =Root;6 7 while(!stree.empty () | | (Visit! =NULL))8 {9 if(Visit! =NULL)Ten { OneVtree.push_back (Visit->val);//If visit is not empty, visit it A if(Visit->right! = NULL)//if Visit->right exit, push it in stack -Stree.push (visit->Right ); -Visit = visit->Left ; the } - Else //visit is null - { -Visit =stree.top (); + Stree.pop (); - } + } A at returnVtree; -}
Leetcode 144. Binary Tree Preorder Traversal