[LeetCode]Binary Tree Inorder Traversal

来源:互联网 发布:广东管理网络干部学院 编辑:程序博客网 时间:2024/05/23 02:12

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.


OJ's Binary Tree Serialization:

The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.

Here's an example:

   1  / \ 2   3    /   4    \     5
The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}".

递归方法

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public List<Integer> inorderTraversal(TreeNode root) {    if(root == null){    List<Integer> list = new ArrayList<Integer>();    return list;    }    if(root.left==null&&root.right==null){    List<Integer> list = new ArrayList<Integer>();    list.add(root.val);    return list;    }        List<Integer> leftList = inorderTraversal(root.left);    List<Integer> rightList = inorderTraversal(root.right);    List<Integer> res = new ArrayList<>();    res.addAll(leftList);    res.add(root.val);    res.addAll(rightList);    return res;    }}

stack维护

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





0 0
原创粉丝点击