题目描述
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 \ 5The above binary tree is serialized as"{1,2,3,#,#,4,#,#,5}".
题目故弄玄虚说了那么多,就是一句话,求中序遍历。
这里有一个问题需要注意,就是最后需要返回的是ArrayList,而不是以前做的System.out.print(),把ArrayList作为参数带进去,这样处理下来最终这个list里面就保存了所有遍历过得元素。 这个小点在很多题目中都能应用到,就是把最终需要输出的list或者数组以参数的形式放进递归函数里,最终输出这个参数代表的数据结果。
import java.util.*;
public class Solution {
public ArrayList<Integer> inorderTraversal(TreeNode root) {
ArrayList<Integer> list = new ArrayList<Integer>();
inorder(root, list);
return list;
}
public static void inorder(TreeNode root, ArrayList<Integer> list) {
if(root != null){
inorder(root.left,list);
list.add(root.val);
inorder(root.right,list);
}
}
}
这就是代码,理论很简单,就是利用递归,先左孩子,然后根节点,最后右孩子。
类似地,我们可以得出先序遍历,后序遍历的代码。