剑指offer-面试题 18:树的子结构
来源:互联网 发布:爱奇艺视频下载软件 编辑:程序博客网 时间:2024/06/04 01:05
面试题 18:树的子结构
题目:输入两颗二叉树 A 和 B,判断 B 是不是 A 的子结构。
思路
这道题不难想到用递归做会好一点,基本思路是:
①先判断两棵树的根结点值是否相同,相同则继续比较左子树,右子树的值,子树值不同返回false,子树值相同则继续向下递归比较,直到找到为止;
②如果根结点值就不相同,则对树A的左子树与树B重复上述①过程,如果找到子树返回true;
③如果②完成后没找到,则对树A的左子树与树B重复上述①过程,如果找到子树返回true,没找到则确定B不是A的子树,方法返回false。
代码
package swordOffer;/** * 面试题 18:树的子结构 * 题目:输入两颗二叉树 A 和 B,判断 B 是不是 A 的子结构。 * * @author Stephen Huge * @date 17/04/25 */public class Ex18JudgeSubTree { public static void main(String[] args) { Ex18JudgeSubTree jst = new Ex18JudgeSubTree(); BinaryNode a = new BinaryNode(2); BinaryNode b = new BinaryNode(2); BinaryNode c = new BinaryNode(3); BinaryNode d = new BinaryNode(4); BinaryNode e = new BinaryNode(5); BinaryNode f = new BinaryNode(6); a.lChild = b; a.rChild = c; b.lChild = d; b.rChild = e; c.lChild = f; boolean sol = jst.judgeSubTree(a, b);// boolean sol = jst.judgeSubTree(a, a);// boolean sol = jst.judgeSubTree(a, jst.new BinaryNode(7)); System.out.println(sol); } public boolean judgeSubTree(BinaryNode biNode, BinaryNode sub) { if(sub == null) { return true; }else if(biNode == null) { return false; } if(biNode.data == sub.data) { // return judgeSubTree(biNode.lChild, sub.lChild) && // judgeSubTree(biNode.rChild, sub.rChild);//这里要注意:如果结点值能相等,直接返回会导致判断错误 if(judgeSubTree(biNode.lChild, sub.lChild) && judgeSubTree(biNode.rChild, sub.rChild) == true) { return true; } } boolean result = false; result = judgeSubTree(biNode.lChild, sub); if(!result) { result = judgeSubTree(biNode.rChild, sub); } return result; }// public class BinaryNode{//建议保存在新的文件中,不然在main函数新建时的方式是BinaryNode node = jsp.new BinaryNode(1);// int data;// BinaryNode lChild;// BinaryNode rChild;// public BinaryNode(int data) {// this.data = data;// }// }}
需要注意的是如果二叉树的结点值允许重复,那么根结点相同后,直接进行子树比较,找到了,直接返回true没有问题;但是如果没有找到,那么不能直接返回false,而是应该开始②,③过程,在树A的子树中继续寻找和树B根结点值相同的结点,最后得出正确结果。
0 0
- [剑指offer][面试题18]树的子结构
- 【剑指offer】面试题18:树的子结构
- 剑指offer 面试题18 树的子结构
- 剑指Offer:面试题18 树的子结构
- 《剑指Offer》面试题18:树的子结构
- 剑指offer 面试题18—树的子结构
- 【剑指Offer学习】【面试题18 :树的子结构】
- 剑指offer面试题18-树的子结构
- 剑指offer-面试题18:树的子结构
- 剑指offer之面试题18:树的子结构
- 剑指offer之面试题18树的子结构
- 剑指Offer----面试题18:树的子结构
- 剑指offer-面试题18:树的子结构
- 剑指offer面试题18:树的子结构
- 剑指offer面试题18:树的子结构
- 剑指offer面试题18:树的子结构
- 剑指offer--面试题18:树的子结构
- 剑指Offer---面试题18:树的子结构
- Html5+如何获取ios手机当前位置
- 回溯-01背包问题
- 我的算法15
- 16.[个人]C++线程入门到进阶(16)----线程函数:CreateThread与_beginthread
- 逻辑卷管理器LVM扩展,缩减,快照,删除
- 剑指offer-面试题 18:树的子结构
- Hibernate的优化方案
- Git部署(二)注册Git账号
- mysql必知必会读书笔记(三到九章)
- Codeforces Beta Round #8 E. Beads (数位dp)
- 自此使用Object字面量取代switch
- 已知图片某区域内所有点坐标,求区域周长(非opencv轮廓提取)
- [AHK]用AHK执行JavaScript
- git基本操作