华为机试真题实战应用【赛题代码篇】-按照路径替换二叉树(附Java和C++代码实现)

题目描述

将一棵二叉树按照路径替换到另一棵二叉树中,得到一棵新的二叉树。替换动作满足如下条件:

    子树的根节点完全替换根二叉树对应的节点
    子树根节点下的子树完全保留
    根二叉树的对应节点下的子树完全删除

输入描述

输入为三行

第一行:一个数组,表示根二叉树。二叉树的每个节点在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]

输出

[1,1,5,3]

样例2
输入

[1,1,2,0,0,4,5]
/1/1
[5,3,0]

输出

[1,5,2,3,4,5]

知识储备

二叉树、递归    200/中等

解题思路

先建树,之后找到对应节点直接替换即可,最后进行层次遍历打印所有的值。

注意这里的数组表示空的可以是null,可以是0,也可以是-1。根据题目要求进行判空。

然后二叉树建好以后,这道题考察的就是一个子树替换的方法了

你可能感兴趣的:(华为机试)