给定一个二叉树,返回它的中序遍历。 示例: DFS的递归调用: dfs的递归调用需要注意递归函数中必要的形参以及递归的条件或终止条件!
List<Integer> l = new LinkedList<Integer>(); public List<Integer> inorderTraversal(TreeNode root) { DFS(root,l); return l; } public void DFS(TreeNode r,List<Integer> list){ if(r!=null) { DFS(r.left,list); list.add(r.val); DFS(r.right,list); }DFS的非递归: dfs的非递归是通过工具栈来实现系统栈的功能!要设计好何时数据进栈,何时数据出栈!
public List<Integer> inorderTraversal(TreeNode root) { Stack<TreeNode> stack = new Stack<TreeNode>(); List<Integer> list = new LinkedList<Integer>(); TreeNode p = root; while(p!=null||!stack.isEmpty()){ while(p!=null) { stack.add(p); p = p.left; } p = stack.pop(); list.add(p.val); p = p.right; } return list; }