题解 | #输出二叉树的右视图#
输出二叉树的右视图
https://www.nowcoder.com/practice/c9480213597e45f4807880c763ddd5f0
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 求二叉树的右视图
* @param preOrder int整型一维数组 先序遍历
* @param inOrder int整型一维数组 中序遍历
* @return int整型一维数组
*/
public int[] solve (int[] preOrder, int[] inOrder) {
// write code here
List<Integer> list = new ArrayList<>();
TreeNode node = buildTree(preOrder,inOrder);
Queue<TreeNode> queue = new LinkedList<>();
queue.add(node);
while(!queue.isEmpty()){
int size = queue.size();
for(int i = 0;i < size;i++){
TreeNode tmp = queue.poll();
if(tmp.left != null){
queue.add(tmp.left);
}
if(tmp.right != null){
queue.add(tmp.right);
}
if(i == size - 1){
list.add(tmp.val);
}
}
}
int[] res = new int[list.size()];
for(int i = 0;i < list.size();i++){
res[i] = list.get(i);
}
return res;
}
private TreeNode buildTree(int[] preOrder, int[] inOrder){
if(preOrder.length == 0 || inOrder.length == 0){
return null;
}
TreeNode node = new TreeNode(preOrder[0]);
for(int i = 0;i < inOrder.length;i++){
if(preOrder[0] == inOrder[i]){
node.left = buildTree(Arrays.copyOfRange(preOrder,1,i+1),Arrays.copyOfRange(inOrder,0,i));
node.right = buildTree(Arrays.copyOfRange(preOrder,i+1,preOrder.length),Arrays.copyOfRange(inOrder,i+1,inOrder.length));
break;
}
}
return node;
}
}
