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.
Show Similar Problems
使用递归的方法
Code:
package com.leetcode.problems;
import java.util.ArrayList;
import java.util.List;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class Solution94 {
public void recursion(TreeNode root,List<Integer> re){
if(root!=null){
if(root.left!=null){
recursion(root.left, re);
}
re.add(root.val);
if(root.right!=null){
recursion(root.right, re);
}
}
}
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
if(root != null){
recursion(root,list);
}
return list;
}
public static void main(String[] args) {
TreeNode tn1 = new TreeNode(1);
TreeNode tn2 = new TreeNode(2);
TreeNode tn3 = new TreeNode(3);
tn1.left = null;
tn1.right = tn2;
tn2.left = tn3;
tn2.right = null;
tn3.left = null;
tn3.right = null;
List<Integer> list = new Solution94().inorderTraversal(tn1);
for(Integer i:list){
System.out.println(i);
}
}
}
方式二:使用栈的方式
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode cur = root;
while(cur!=null || !stack.isEmpty()){
while(cur!=null){
stack.push(cur);
cur = cur.left;
}
cur = stack.pop();
list.add(cur.val);
cur = cur.right;
}
return list;
}