算法面试题之二叉树的子结构

最近在刷剑指offer,把自己的理解写下来

01 题目

输入两颗二叉树 A和B,判断B是不是A的子结构

如:

程序员算法面试题之二叉树的子结构

A

程序员算法面试题之二叉树的子结构

B

B是A的子结构,B中的节点与A的孩子结构 2,5,6 完全对应。

02 解题

二叉树的每个结点最多有两个子树的树结构。通常左孩子节点,被称为左子树,右孩子节点也可以称为右子树。

判断B是否为A的子树,即要对比B的树结构在A中是否存在,所以我们需要一个对比函数,对比A 节点与B节点是否存在完全相同的树结构。

除此之外,我们还需要定位A中与B根节点相同的节点。

过程如下:

程序员算法面试题之二叉树的子结构

 

程序员算法面试题之二叉树的子结构

 

程序员算法面试题之二叉树的子结构

 

程序员算法面试题之二叉树的子结构

 

程序员算法面试题之二叉树的子结构

 

程序员算法面试题之二叉树的子结构

 

03 代码

判断tree1中是否有节点与tree2的根节点相同

程序员算法面试题之二叉树的子结构

 

判断tree1的节点是否与tree2的节点完全相同

程序员算法面试题之二叉树的子结构

 

04 总结

只要想清楚,分两步这道题就很清晰。如果考虑在一个递归里完成,就不容易解出来。另外本体用到了前序遍历二叉树的知识点。前序遍历即,根节点,左孩子节点,右孩子节点的遍历顺序。

测试用例

边界测试:分别输入A节点和B节点为null

普通测试:输入A,B都有节点,B是A的子结构,B不是A的子结构

特殊测试:输入树结构,只有左孩子节点,或者只有右孩子节点。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值