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?
recursive
java
ArrayList<Integer> result;
public ArrayList<Integer> preorderTraversal(TreeNode root) {
result = new ArrayList<Integer>();
preT(root);
return result;
}
public void preT(TreeNode root){
if(root!=null){
result.add(root.val);
preT(root.left);
preT(root.right);
}
}
c++
void Preorder(TreeNode *root, vector<int> &result){
if(root!= NULL){
result.push_back(root->val);
Preorder(root->left, result);
Preorder(root->right, result);
}
}
vector<int> preorderTraversal(TreeNode *root) {
vector<int> result;
Preorder(root, result);
return result;
}
iterative
java
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
if(root==null) return result;
Stack<TreeNode> path = new Stack<>();
path.push(root);
while(!path.isEmpty()){
TreeNode topNode = path.pop();
result.add(topNode.val);
if(topNode.right!=null)
path.push(topNode.right);
if(topNode.left!=null)
path.push(topNode.left);
}
return result;
}
c++
vector<int> preorderTraversal(TreeNode *root) {
vector<int> path;
stack<TreeNode*> stk;
if(root != NULL){
stk.push(root);
while(!stk.empty()){
root = stk.top();
stk.pop();
path.push_back(root->val);
if(root->right) stk.push(root->right);
if(root->left) stk.push(root->left);
}
}
return path;
}