描述

请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图

思路:重建&层次遍历记录最后一个&Lambda表达式

答案:

import java.util.*;

public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 求二叉树的右视图
* @param xianxu int整型一维数组 先序遍历
* @param zhongxu int整型一维数组 中序遍历
* @return int整型一维数组
*/
//思路:使用队列BFS层次遍历,当到达最后一个节点时加入res
public int[] solve (int[] xianxu, int[] zhongxu) {
List<Integer> res = new ArrayList<>();
//先确定二叉树
TreeNode root = reconstrution(xianxu, 0, xianxu.length - 1, zhongxu, 0, zhongxu.length - 1);
//使用队列,对树进行层次遍历
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()) {
int size = queue.size();
for(int i = 0; i < size; i++) {
if(i == size - 1) {
res.add(queue.peek().val);
}
TreeNode node = queue.poll();
if(node.left != null) {
queue.offer(node.left);
}
if(node.right != null) {
queue.offer(node.right);
}
}
}
return res.stream().mapToInt(x -> x).toArray();
}
//递归,类似回溯:路径、选择列表、结束条件
//但是回溯要移除选择,而递归无需移除选择
public TreeNode reconstrution(int[] xianxu, int preStart, int preEnd, int[] zhongxu, int inStart, int inEnd) {
if(preStart > preEnd || inStart > inEnd) {
return null;
}
TreeNode root = new TreeNode(xianxu[preStart]);
//找到中序的位置
int i = 0;
for(i = inStart; i <= inEnd; i++) {
if(zhongxu[i] == xianxu[preStart]) {
break;
}
}
root.left = reconstrution(xianxu, preStart + 1, preStart + (i - inStart), zhongxu, inStart, i - 1);
root.right = reconstrution(xianxu, preStart + (i - inStart) + 1, preEnd, zhongxu, i + 1, inEnd);
return root;
}
}

最新文章

  1. unity3d 孤岛求生基础案例
  2. [No00001A]天天换图,百词斩到底在折腾啥
  3. Ajax的实现
  4. 修改FFMpeg源码—捕获丢包
  5. Mac os 10.9下面配置JAVA_HOME
  6. 关于js对象引用的小例子
  7. FPGA系统中DRAM,SRAM,SDRAM,FLASH 区别(转)
  8. JS中小数的差,比较大小
  9. delphi 7 下安装 indy 10.5.8 教程
  10. 基于线程池的多线程售票demo(原创)
  11. linux目录1
  12. JQuery - 阻止回车键
  13. jmeter安装教程与新手入门(附jdk安装教程)
  14. 常见hash算法的原理(转)
  15. 消息 8101,级别 16,状态 1,第 1 行 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表&#39;ResourceInfo&#39;中的标识列指定显式值。
  16. TP3.2整合kindeditor
  17. [JavaScript] 将字符串数组转化为整型数组
  18. Windows下LimeSDR Mini使用说明
  19. Python—对Excel进行读写操作
  20. 020.1.2 Arrays集合工具类

热门文章

  1. 利用分层机制优化 Docker Image
  2. Linux yum安装PostgreSQL9.6
  3. 基于Alpine镜像定制自己的工具箱
  4. SQLServer配置开启TCP/IP连接
  5. 【Java8新特性】- 接口中默认方法修饰为普通方法
  6. TF-GNN踩坑记录(一)
  7. ubuntu20.04 利用xrandr命令修改多显示器分辨率
  8. IDEA对数据库、表、记录的(增删改查可视化操作)、数据库安全性问题的演示
  9. 驱动开发:内核测试模式过DSE签名
  10. 文本挖掘与NLP笔记——代码向:分词