剑指 Offer 26. 树的子结构
Posted 易小顺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer 26. 树的子结构相关的知识,希望对你有一定的参考价值。
算法记录
LeetCode 题目:
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
说明
一、题目
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
输入:A = [1,2,3], B = [3,1]
输出:false
二、分析
- 两棵树需要相等,则对应的每个节点上的数据也要相等。
- 也就是说我们遍历整棵树,如果当前节点的值和需要比较的
B
树的根节点值相等,我们就将此节点作为根的子树和B
树进行判等。 - 要注意判定树相等返回值结果,如果
B
树已经为空了,则没有必要进行下一步的判断(不管是否还有剩余的);但是如果B
不空、A
空了,那就直接false
。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean equal(TreeNode A, TreeNode B) {
if(B == null) return true;
if(A == null) return false;
return A.val == B.val && equal(A.left, B.left) && equal(A.right, B.right);
}
public boolean isSubStructure(TreeNode A, TreeNode B) {
if(A == null || B == null) return false;
if(A.val == B.val && equal(A.left, B.left) && equal(A.right, B.right)) return true;
return isSubStructure(A.left, B) || isSubStructure(A.right, B);
}
}
总结
熟悉两棵树相等的递归实现。
以上是关于剑指 Offer 26. 树的子结构的主要内容,如果未能解决你的问题,请参考以下文章
剑指 Offer 26. 树的子结构 / 剑指 Offer 27. 二叉树的镜像 / 剑指 Offer 28. 对称的二叉树 / 剑指 Offer 29. 顺时针打印矩阵