• step 1:首先检查两个遍历序列的大小,若是为0,则空树不用打印。
  • step 2:建树函数根据上述说,每次利用前序遍历第一个元素就是根节点,在中序遍历中找到它将二叉树划分为左右子树,利用l1 r1 l2 r2分别记录子树部分在数组中分别对应的下标,并将子树的数组部分送入函数进行递归。    关于建树,参考上建立二叉树时的推荐代码,可以看出,建树核心就是在于,如何确定子树,上一题是把整个数据拿出来,占用了新的空间,而这次是只拿出了标号,原地操作。                                               两者核心都是 通过前序第一节点(根)确定子树。
  • step 3:dfs打印右视图时,使用哈希表(《int,int》的哈希就相当于数组) 存储每个深度对应的最右边节点,初始化两个栈辅助遍历,第一个栈记录dfs时的节点,第二个栈记录遍历到的深度,根节点先入栈。
  • step 4:对于每个访问的节点,每次左子节点先进栈,右子节点再进栈,这样访问完一层后,因为栈的先进后出原理,每次都是右边被优先访问,因此我们在哈希表该层没有元素时,添加第一个该层遇到的元素就是最右边的节点。if(mp.get(depth) == null)
  • step 5:使用一个变量逐层维护深度最大值,最后遍历每个深度,从哈希表中读出每个深度的最右边节点加入数组中。