题目描述:
思路:典型的二叉树的中序遍历,唯一需要注意的是需要一个数组来存储各个结点。
import java.util.LinkedList;
import java.util.List;
public class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
LinkedList<Integer> result=new LinkedList();
inorder(root,result);
return result;
}
public void inorder(TreeNode root,List<Integer> list){
if (root!=null){
if (root.left!=null) inorder(root.left,list);
list.add(root.val);
if (root.right!=null) inorder(root.right,list);
}
}
}
题目给的节点类。
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
迭代算法:利用栈来添加节点
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
public class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
LinkedList<Integer> result=new LinkedList();
Deque<TreeNode> deque=new LinkedList<>();
TreeNode cur=root;
while (!deque.isEmpty()||cur!=null){
while (cur!=null){
deque.push(cur);
cur=cur.left;
}
cur=deque.pop();
result.add(cur.val);
cur=cur.right;
}
return result;
}
}