Day39 tree02

  1. 在 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;
}


  1. 根据中序和后续遍历实现建树操作
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;
}
发布了27 篇原创文章 · 获赞 11 · 访问量 2330

猜你喜欢

转载自blog.csdn.net/qq_43587378/article/details/105567101