[LeetCode] Binary Tree Preorder Traversal

来源:互联网 发布:java工程师薪资 编辑:程序博客网 时间:2024/06/16 16:38
Problem : 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?

1.C++版

/** * Definition for binary tree * 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) {        TreeNode* p = root,*q = root;        vector<int> result;        stack<TreeNode*> stack;                while(NULL != p || !stack.empty()){            while(NULL != p){                result.push_back(p->val);                stack.push(p);                p = p->left;            }                    if(!stack.empty()){                q = stack.top();                stack.pop();                p = q->right;            }        }                return result;    }};

2.Java版

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public ArrayList<Integer> preorderTraversal(TreeNode root) {        TreeNode p = root,q = root;        Stack<TreeNode> stack = new Stack<TreeNode>();        ArrayList<Integer> result = new ArrayList<Integer>();                while(null != p || !stack.isEmpty()){            while(null != p){                result.add(p.val);                stack.push(p);                p = p.left;            }                        if(!stack.isEmpty()){                q = stack.pop();                p = q.right;            }        }                return result;    }}

3.Python版

待续


 完

0 0
原创粉丝点击