package ACM_Exercise;
import java.util.*;
/**
* @author Halu
* @create 2022-09-30 20:04
*/
public class HuaTest3 {
public static class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int val){
this.val=val;
}
}
public static ArrayList<Integer> res = new ArrayList<>();
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s1 = in.nextLine();
String[] str1 = s1.substring(1,s1.length()-1).split(",");
String s2 = in.nextLine();
String[] str2 = s2.substring(1,s2.length()).split("/");
String s3 = in.nextLine();
String[] str3 = s3.substring(1,s3.length()-1).split(",");
// // 字符串数组转为数组
int[] num1 = new int[str1.length];
int[] num2 = new int[str2.length];
int[] num3 = new int[str3.length];
for (int i = 0; i < str1.length; i++) {
num1[i] = Integer.parseInt(str1[i]);
}
for (int i = 0; i < str2.length; i++) {
num2[i] = Integer.parseInt(str2[i]);
}
for (int i = 0; i < str3.length; i++) {
num3[i] = Integer.parseInt(str3[i]);
}
// 建立二叉树
TreeNode tree1 = BuildTree(num1,0);
TreeNode tree2 = BuildTree(num3,0);
// 进行子树替换
// if (num2.length>1){
replaceTree(tree1,tree2,num2,1);
// }else{
// tree1 = tree2;
// }
// 遍历输出
Queue<TreeNode> queue = new LinkedList<>();
queue.add(tree1);
while (!queue.isEmpty()){
// List<Integer> levelRes = new ArrayList<Integer>();//存当前层的节点
int size=queue.size();//计算队列的size
while (size>0){
TreeNode cur = queue.poll();
size--;
res.add(cur.val);
if (cur.left!=null) queue.add(cur.left);
if (cur.right!=null) queue.add(cur.right);
}
// res.add(levelRes);
}
String outStr = "[";
int index = 0;
for(int num:res){
if (num==0){
outStr += num1[index];
}else {
outStr += num;
}
if (index<num1.length-1){
outStr+=",";
}else{
outStr+="]";
}
index++;
}
System.out.println(outStr);
//
}
private static void replaceTree(TreeNode root1, TreeNode root2, int[] path, int i) {
if (i==path.length-1){
if (root1.left!=null && root1.left.val==path[i]){
replaceHelp(root1.left,root2);
return;
}else if (root1.right!=null && root1.right.val==path[i]){
replaceHelp(root1.right,root2);
return;
}
}
if (root1.left!=null && root1.left.val==path[i]){
replaceTree(root1.left,root2,path,i+1);
}else if(root1.right!=null && root1.right.val==path[i]){
replaceTree(root1.right,root2,path,i+1);
}
}
public static void replaceHelp(TreeNode root1, TreeNode root2){
if (root1==null && root2==null){
return;
}
if(root1!=null && root2!=null) {
root1.val = root2.val;
replaceHelp(root1.left, root2.left);
replaceHelp(root1.right, root2.right);
}
if (root1==null && root2!=null){
root1=root2;
}
return;
}
public static TreeNode BuildTree(int[] nums, int index){
TreeNode newNode = null;
if(index<nums.length){
newNode = new TreeNode(nums[index]);
newNode.left = BuildTree(nums,2*index+1);
newNode.right = BuildTree(nums,2*index+2);
}
return newNode;
}
}
package ACM_Exercise;
import java.util.*;
/**
* @author Halu
* @create 2022-09-30 20:04
*/
public class HuaTest3 {
public static class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int val){
this.val=val;
}
}
public static ArrayList<Integer> res = new ArrayList<>();
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s1 = in.nextLine();
String[] str1 = s1.substring(1,s1.length()-1).split(",");
String s2 = in.nextLine();
String[] str2 = s2.substring(1,s2.length()).split("/");
String s3 = in.nextLine();
String[] str3 = s3.substring(1,s3.length()-1).split(",");
// // 字符串数组转为数组
int[] num1 = new int[str1.length];
int[] num2 = new int[str2.length];
int[] num3 = new int[str3.length];
for (int i = 0; i < str1.length; i++) {
num1[i] = Integer.parseInt(str1[i]);
}
for (int i = 0; i < str2.length; i++) {
num2[i] = Integer.parseInt(str2[i]);
}
for (int i = 0; i < str3.length; i++) {
num3[i] = Integer.parseInt(str3[i]);
}
// 建立二叉树
TreeNode tree1 = BuildTree(num1,0);
TreeNode tree2 = BuildTree(num3,0);
// 进行子树替换
// if (num2.length>1){
replaceTree(tree1,tree2,num2,1);
// }else{
// tree1 = tree2;
// }
// 遍历输出
Queue<TreeNode> queue = new LinkedList<>();
queue.add(tree1);
while (!queue.isEmpty()){
// List<Integer> levelRes = new ArrayList<Integer>();//存当前层的节点
int size=queue.size();//计算队列的size
while (size>0){
TreeNode cur = queue.poll();
size--;
res.add(cur.val);
if (cur.left!=null) queue.add(cur.left);
if (cur.right!=null) queue.add(cur.right);
}
// res.add(levelRes);
}
String outStr = "[";
int index = 0;
for(int num:res){
if (num==0){
outStr += num1[index];
}else {
outStr += num;
}
if (index<num1.length-1){
outStr+=",";
}else{
outStr+="]";
}
index++;
}
System.out.println(outStr);
//
}
private static void replaceTree(TreeNode root1, TreeNode root2, int[] path, int i) {
if (i==path.length-1){
if (root1.left!=null && root1.left.val==path[i]){
replaceHelp(root1.left,root2);
return;
}else if (root1.right!=null && root1.right.val==path[i]){
replaceHelp(root1.right,root2);
return;
}
}
if (root1.left!=null && root1.left.val==path[i]){
replaceTree(root1.left,root2,path,i+1);
}else if(root1.right!=null && root1.right.val==path[i]){
replaceTree(root1.right,root2,path,i+1);
}
}
public static void replaceHelp(TreeNode root1, TreeNode root2){
if (root1==null && root2==null){
root1 = null;
return ;
}
if (root1==null && root2!=null){
root1=root2;
return;
}
if(root1!=null && root2==null){
return;
}
// if(root1!=null && root2!=null) {
root1.val = root2.val;
replaceHelp(root1.left, root2.left);
replaceHelp(root1.right, root2.right);
// }
return;
}
public static TreeNode BuildTree(int[] nums, int index){
TreeNode newNode = null;
if(index<nums.length){
newNode = new TreeNode(nums[index]);
newNode.left = BuildTree(nums,2*index+1);
newNode.right = BuildTree(nums,2*index+2);
}
return newNode;
}
}