题解 | 输出二叉树的右视图
输出二叉树的右视图
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
TreeNode root = getOriginalNode(preOrder,inOrder);
ArrayList<Integer> asList = new ArrayList<Integer>();
ArrayList<TreeNode> level = new ArrayList<TreeNode>();
level.add(root);
while(!level.isEmpty()){
asList.add(level.get(level.size()-1).val);
ArrayList<TreeNode> temp = new ArrayList<TreeNode>();
for(TreeNode node:level){
if(node.left!=null) temp.add(node.left);
if(node.right!=null) temp.add(node.right);
}
level = temp;
}
int[] result = new int[asList.size()];
for(int i =0;i<asList.size();i++){
result[i] = asList.get(i);
}
return result;
}
public TreeNode getOriginalNode(int[] preOrder, int[] inOrder){
if(preOrder.length == 0 || inOrder.length == 0){
return null;
}
TreeNode root = new TreeNode(preOrder[0]);
for(int i=0;i<inOrder.length;i++){
if(preOrder[0] == inOrder[i]){
root.left = getOriginalNode(Arrays.copyOfRange(preOrder,1,i+1),Arrays.copyOfRange(inOrder,0,i));
root.right = getOriginalNode(Arrays.copyOfRange(preOrder,i+1,preOrder.length),Arrays.copyOfRange(inOrder,i+1,inOrder.length));
}
}
return root;
}
}
