[LeetCode-11] Binary Tree Inorder Traversal

来源:互联网 发布:java编写口令红包 编辑:程序博客网 时间:2024/04/29 13:16

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?

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.

For recursion version, it's very easy to write.

But for iterative version, we need a stack to help.

java recursion

public ArrayList<Integer> result;    public ArrayList<Integer> inorderTraversal(TreeNode root) {        result = new ArrayList<Integer>();        inorderTrRe(root);return result;    }    public void inorderTrRe(TreeNode root){if(root!=null){        inorderTrRe(root.left);        result.add(root.val);        inorderTrRe(root.right);        }}

java iterative

public class Solution {    public ArrayList<Integer> result;    public ArrayList<Integer> inorderTraversal(TreeNode root) {        result = new ArrayList<Integer>();        if(root== null) return result;        inorderTraversal1(root);return result;    }    public void inorderTraversal1(TreeNode root) {        // IMPORTANT: Please reset any member data you declared, as        // the same Solution instance will be reused for each test case.Stack<TreeNode> stack = new Stack<TreeNode>();TreeNode node = root;while(stack.size()>0 || node!=null){while(node != null){stack.push(node);node = node.left;}node = stack.pop();result.add(node.val);node = node.right;}    }}

c++ recursion

void inorder(TreeNode *root,vector<int> &path){        if(root!=NULL){            inorder(root->left,path);            path.push_back(root->val);            inorder(root->right,path);        }    }    vector<int> inorderTraversal(TreeNode *root) {    vector<int> path;    if(root == NULL) return path;    inorder(root, path);    return path;    }


c++ iterative

vector<int> inorderTraversal(TreeNode *root) {        vector<int> path;    stack<TreeNode*> stk;    path.clear();    if(root == NULL) return path;    TreeNode *p = root;    while(p != NULL || !stk.empty()){        while(p!=NULL){            stk.push(p);            p = p->left;        }            p = stk.top();            stk.pop();            path.push_back(p->val);            p = p->right;            }    return path;    }



0 0
原创粉丝点击