赞
踩
1."之""字行说明每一层的顺序是不一样的,第一层是从左到右,第二层就是从右到左
2.实际上每一层的顺序不一样,但是还是按照层序遍历的方式来遍历层的
3.层序遍历一般用到队列 ,但是这个顺序有时候是逆序,我们联想到的数据结构就是栈
4.整体思路:
- import java.util.*;
-
- /*
- public class TreeNode {
- int val = 0;
- TreeNode left = null;
- TreeNode right = null;
- public TreeNode(int val) {
- this.val = val;
- }
- }
- */
- public class Solution {
- public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
- ArrayList<Integer> list = new ArrayList<>();
- ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
- if(pRoot == null){
- return result;
- }
- Stack<TreeNode> stack = new Stack<>();
- Queue<TreeNode> q = new LinkedList<>();
- stack.push(pRoot);
- int dir = 1;
- while(!stack.isEmpty()){
- int size = stack.size();
- for(int i = 0;i < size;i++){
- //先去把stack 中的元素全部出栈
- TreeNode node = stack.pop();
- list.add(node.val);
- TreeNode first = (dir == 1) ? node.left : node.right;
- TreeNode second = (dir == 1)? node.right: node.left;
- if(first != null) q.offer(first);
- if(second != null) q.offer(second);
- //这里执行一次循环实际上是将一个节点val放到list中,然后这个节点的左右子树
- //根据dir的值进行顺序入队列
- }
- //一个for循环结束意味着这一层的出栈下一层的入队列都结束了
- result.add(new ArrayList(list));
- list.clear();
- //此时我们就去把存储在队列中的这一层入到栈中
- while(!q.isEmpty()){
- stack.push(q.poll());
- }
- dir = (dir == 1) ? 2 : 1;
- }
- return result;
- }
-
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。