提交 cf40a01d 编写于 作者: GreyZeng's avatar GreyZeng

level travel bst

上级 68a6bcb6
......@@ -34,7 +34,10 @@
[重建二叉树问题](https://www.cnblogs.com/greyzeng/p/16715432.html)
[二叉树的按层遍历](https://www.cnblogs.com/greyzeng/p/16356829.html)
[二叉树的按层遍历相关问题](https://www.cnblogs.com/greyzeng/p/16356829.html)
- 类似问题一: 二叉树自底向上层序遍历
## 更多
......
package git.snippet.tree;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.*;
// 笔记:https://www.cnblogs.com/greyzeng/p/16356829.html
// https://leetcode.com/problems/binary-tree-level-order-traversal-ii
// 按层遍历进阶:从底部开始遍历
// Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from
// left to right, level by level from leaf to root).
//
// For example:
// Given binary tree [3,9,20,null,null,15,7],
// 3
// / \
// 9 20
// / \
// 15 7
// return its bottom-up level order traversal as:
// [
// [15,7],
// [9,20],
// [3]
// ]
// 只需要把按层遍历的队列结构改成栈就可以
public class LeetCode_0107_BinaryTreeLevelOrderTraversalII {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> ans = new ArrayList<>();
if (root == null) {
return ans;
if (null == root) {
return new ArrayList<>();
}
TreeNode cur = root;
Deque<List<Integer>> stack = new ArrayDeque<>();
List<List<Integer>> result = new ArrayList<>();
List<Integer> levelRecords = new ArrayList<>();
TreeNode curEnd = root;
TreeNode nextEnd = null;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(cur);
List<Integer> items = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
cur = queue.poll();
if (cur.left != null) {
queue.offer(cur.left);
nextEnd = cur.left;
TreeNode poll = queue.poll();
levelRecords.add(poll.val);
if (null != poll.left) {
queue.offer(poll.left);
nextEnd = poll.left;
}
if (cur.right != null) {
queue.offer(cur.right);
nextEnd = cur.right;
if (null != poll.right) {
queue.offer(poll.right);
nextEnd = poll.right;
}
items.add(0, cur.val);
if (curEnd == cur) {
if (poll == curEnd) {
curEnd = nextEnd;
// 如果是顺序按层遍历,这段代码只需要改成
// ans.add(items);
ans.add(0, items);
items = new LinkedList<>();
stack.push(levelRecords);
levelRecords = new ArrayList<>();
}
}
return ans;
while (!stack.isEmpty()) {
result.add(stack.poll());
}
return result;
}
public class TreeNode {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册