[LeetCode] Binary Tree Inorder Traversal

来源:互联网 发布:java解压缩rar 编辑:程序博客网 时间:2024/05/29 18:06
Problem : Given a binary tree, return the inorder traversal of its nodes' values.

For example : Given binary tree {1,#,2,3},

   1    \     2    /   3

return [1,3,2].

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> inorderTraversal(TreeNode *root) {        TreeNode *p = root, *q = root;        stack<TreeNode*> stack;        vector<int> result;                while(NULL != p || !stack.empty()){            while(NULL != p){                stack.push(p);                p = p->left;            }                        if(!stack.empty()){                q = stack.top();                result.push_back(q->val);                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> inorderTraversal(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){                stack.push(p);                p = p.left;            }                        if(!stack.isEmpty()){                q = stack.peek();                result.add(q.val);                p = q.right;            }        }                return result;    }}

3.Python版

待续

0 0