- 在 BinarySearchTree 中,添加一个方法,实现层级倒序遍历
public List<List< E>> levelOrderReverse() {
}例如:
返回:
public List<List<E>> levelOrderReverse() {
TreeNode node = root;
List<List<E>> list = new ArrayList<>();
Queue<TreeNode> queue = new ArrayDeque<>();
if (node == null) {
return list;
}
queue.add(node);
while (!queue.isEmpty()) {
List<E> newList = new ArrayList<>();
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode treeNode = queue.poll();
newList.add(treeNode.value);
if (treeNode.left != null) {
queue.add(treeNode.left);
}
if (treeNode.right != null) {
queue.add(treeNode.right);
}
}
list.add(0, newList);
}
return list;
}
- 根据中序和后续遍历实现建树操作
private TreeNode buildOfPostAndIn(List<E> postList, List<E> inList) {
// 边界条件
if (postList == null || postList.isEmpty()) {
return null;
}
// 构建根节点
E value = postList.get(postList.size() - 1);
TreeNode node = new TreeNode(value);
int index = inList.indexOf(value);
// 构建左子树(index)
List<E> leftPostList = postList.subList(0, index);
List<E> leftInList = inList.subList(0, index);
node.left = buildOfPostAndIn(leftPostList, leftInList);
// 构建右子树
List<E> rightPostList = postList.subList(index, postList.size() - 1);
List<E> rightInList = inList.subList(index + 1, inList.size());
node.right = buildOfPostAndIn(rightPostList, rightInList);
return node;
}