怎样建立一个营销的公司网站网站建设和技术支持
news/
2025/9/24 2:57:19/
文章来源:
怎样建立一个营销的公司网站,网站建设和技术支持,网络营销的12种手段,wordpress微信收款目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中#xff0c;刷题点这里 专栏导读
本专栏收录于《华为OD机试#xff08;JAVA#xff09;真题#xff… 目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中刷题点这里 专栏导读
本专栏收录于《华为OD机试JAVA真题A卷B卷C卷》。
刷的越多抽中的概率越大每一题都有详细的答题思路、详细的代码注释、样例测试发现新题目随时更新全天CSDN在线答疑。
一、题目描述
将一棵二叉树按照路径替换到另一棵二叉树中得到一棵新的二叉树。替换动作满足如下条件
子树的根节点完全替换根二叉树对应的节点子树根节点下的子树完全保留根二叉树的对应节点下的子树完全删除
二、输入描述
输入为三行
第一行一个数组表示根二叉树。二叉树的每个节点在1到9之间包含1和9空节点用0表示。
第二行一个字符串表示子二叉树根节点对应根二叉树的节点。如“/1/2”对应每个节点不存在相同的子节点即path对应的子树最多只有一个。
第三行一个数组表示子二叉树。二叉树的每个节点在1到9之间包含1和9空节点用0表示。
三、输出描述
一个数组表示一个二叉树逐层从左到右描述为空的节点忽略与输入不同。
1、输入
[1,1,2,0,0,4,5] /1/2 [5,3,0]
2、输出
[1,1,5,3]
四、解题思路
将每行的输入放入根二叉树数组arr1、子二叉树根节点对应根二叉树的节点数组arr2、子二叉树数组arr3根二叉树建树、子二叉树建树子二叉树根节点对应根二叉树的节点进行子树替换如果子二叉树根节点对应根二叉树的节点只有1个则完全替换否则通过回溯替换子树遍历输出结果。
五、Java算法源码
public class Test02 {/*** [1,1,2,0,0,4,5]* /1/2* [5,3,0]*/public static void main(String[] args) {Scanner sc new Scanner(System.in);// 根二叉树String input1 sc.nextLine();String[] inputArr1 input1.substring(1, input1.length() - 1).split(,);// 根二叉树数组int[] arr1 new int[inputArr1.length];for (int i 0; i inputArr1.length; i) {arr1[i] Integer.parseInt(inputArr1[i]);}// 子二叉树根节点对应根二叉树的节点 /1/2String input2 sc.nextLine();String[] inputArr2 input2.substring(1, input2.length()).split(/);int[] arr2 new int[inputArr2.length];for (int i 0; i inputArr2.length; i) {arr2[i] Integer.parseInt(inputArr2[i]);}// 子二叉树String input3 sc.nextLine();String[] inputArr3 input3.substring(1, input3.length() - 1).split(,);// 子二叉树数组int[] arr3 new int[inputArr3.length];for (int i 0; i inputArr3.length; i) {arr3[i] Integer.parseInt(inputArr3[i]);}// 根二叉树建树TreeNode treeNode1 buildTree(arr1, 0);// 子二叉树建树TreeNode treeNode3 buildTree(arr3, 0);// 子二叉树根节点对应根二叉树的节点进行子树替换if (arr2.length 1) {// 替换子树dfs(treeNode1, treeNode3, arr2, 1);} else {// 如果子二叉树根节点对应根二叉树的节点只有1个则完全替换treeNode1 treeNode3;}// 遍历输出结果QueueTreeNode queue new LinkedList();queue.add(treeNode1);String result [;while (!queue.isEmpty()) {TreeNode node queue.poll();result result node.val ,;if (node.left ! null) {queue.add(node.left);}if (node.right ! null) {queue.add(node.right);}}result result.substring(0, result.length() - 1) ];System.out.println(result);}// 建树public static TreeNode buildTree(int[] nums, int index) {TreeNode newNode null;if (index nums.length) {// 0表示空节点如果不是空节点则构建树if (nums[index] ! 0) {// 根节点newNode new TreeNode(nums[index]);newNode.left buildTree(nums, 2 * index 1);newNode.right buildTree(nums, 2 * index 2);}}return newNode;}/*** 替换子树* param treeNode1 根二叉树* param treeNode3 子二叉树* param arr2 子二叉树根节点对应根二叉树的节点* param i*/public static void dfs(TreeNode treeNode1, TreeNode treeNode3, int[] arr2, int i) {// 替換到最后一位终止替换if (i arr2.length - 1) {if (treeNode1.left ! null treeNode1.left.val arr2[i]) {treeNode1.left treeNode3;return;} else if (treeNode1.right ! null treeNode1.right.val arr2[i]) {treeNode1.right treeNode3;return;}}// 替换子树if (treeNode1.left ! null treeNode1.left.val arr2[i]) {dfs(treeNode1.left, treeNode3, arr2, i 1);} else if (treeNode1.right ! null treeNode1.right.val arr2[i]) {dfs(treeNode1.right, treeNode3, arr2, i 1);}}/*** 二叉樹*/public static class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int val) {this.val val;}}
}六、效果展示
1、输入
[1,1,2,0,0,4,5] /1/2 [5,3,0]
2、输出
[1,1,5,3]
3、说明 下一篇华为OD机试 - 简易内存池 - 逻辑分析Java 2024 C卷 200分
本文收录于华为OD机试JAVA真题A卷B卷C卷
刷的越多抽中的概率越大每一题都有详细的答题思路、详细的代码注释、样例测试发现新题目随时更新全天CSDN在线答疑。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914659.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!