Given a binary tree, return the inorder traversal of its nodes' values.
Example:
Input: [1,null,2,3] 1 \ 2 / 3 Output: [1,3,2]
Follow up: Recursive solution is trivial, could you do it iteratively?
My answer: iterative solution
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<Integer>(); if (root == null) { return result; } LinkedList<TreeNode> stack = new LinkedList<TreeNode>(); Set<TreeNode> visitedNodes = new HashSet<TreeNode>(); stack.addLast(root); while(!stack.isEmpty()) { TreeNode current = stack.peekLast(); if (current.left != null && !visitedNodes.contains(current.left)) { stack.addLast(current.left); continue; } result.add(current.val); visitedNodes.add(current); stack.removeLast(); if (current.right != null) { stack.addLast(current.right); } } return result; } }
Jiuzhang solution:
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param root: The root of binary tree. * @return: Inorder in ArrayList which contains node values. */ public ArrayList<Integer> inorderTraversal(TreeNode root) { Stack<TreeNode> stack = new Stack<TreeNode>(); ArrayList<Integer> result = new ArrayList<Integer>(); TreeNode curt = root; while (curt != null || !stack.empty()) { while (curt != null) { stack.add(curt); curt = curt.left; } curt = stack.pop(); result.add(curt.val); curt = curt.right; } return result; } }
No comments:
Post a Comment