二叉树的层次遍历 II

给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历).

public class LevelOrderBottom {
	public class TreeNode {
		int val;
		TreeNode left;
		TreeNode right;

		TreeNode(int x) {
			val = x;
		}
	}

	public List<List<Integer>> levelOrderBottom(TreeNode root) {
		List<List<Integer>> res = new ArrayList<>();
		if (root == null) {
			return res;
		}
		Queue<TreeNode> queue = new LinkedList<>();
		queue.offer(root);
		TreeNode last = root;
		TreeNode nlast = null;
		List<Integer> list = new ArrayList<>();
		while (!queue.isEmpty()) {
			root = queue.poll();
			list.add(root.val);
			if (root.left != null) {
				queue.offer(root.left);
				nlast = root.left;
			}
			if (root.right != null) {
				queue.offer(root.right);
				nlast = root.right;
			}
			if (last == root && !queue.isEmpty()) {
				last = nlast;
				nlast = null;
				res.add(new ArrayList<>(list));
				list.clear();
			}
		}
		res.add(list);
		Collections.reverse(res);
		return res;
	}
}

猜你喜欢

转载自blog.csdn.net/gkq_tt/article/details/88720660