我是靠谱客的博主 尊敬发夹,这篇文章主要介绍LeetCode(剑指 Offer)- 26. 树的子结构,现在分享给大家,希望可以做个参考。

题目链接:点击打开链接

题目大意:

解题思路:

相关企业

  • 字节跳动
  • Facebook
  • 亚马逊(Amazon)

AC 代码

  • Java
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ // 解决方案(1) class Solution { private boolean ok = false; public boolean isSubStructure(TreeNode A, TreeNode B) { if (null == B) { return false; } Queue<TreeNode> queue = new LinkedList<>(); queue.offer(A); TreeNode b = B; while (!queue.isEmpty()) { TreeNode a = queue.poll(); if (a.val == b.val) { bfs(a, b); if (ok) { break; } else { b = B; } } if (a.left != null) { queue.offer(a.left); } if (a.right != null) { queue.offer(a.right); } } return ok; } private void bfs(TreeNode sa, TreeNode sb) { Queue<TreeNode> qa = new LinkedList<>(); Queue<TreeNode> qb = new LinkedList<>(); qa.offer(sa); qb.offer(sb); while (!qb.isEmpty()) { TreeNode a = qa.poll(); TreeNode b = qb.poll(); if (a == null || a.val != b.val) { return; } if (a.left != null) { qa.offer(a.left); } if (a.right != null) { qa.offer(a.right); } if (b.left != null) { qb.offer(b.left); } if (b.right != null) { qb.offer(b.right); } } ok = true; } } // 解决方案(2) class Solution { public boolean isSubStructure(TreeNode A, TreeNode B) { return (A != null && B != null) && (recur(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B)); } boolean recur(TreeNode A, TreeNode B) { if(B == null) return true; if(A == null || A.val != B.val) return false; return recur(A.left, B.left) && recur(A.right, B.right); } }
  • C++
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
class Solution { public: bool isSubStructure(TreeNode* A, TreeNode* B) { return (A != nullptr && B != nullptr) && (recur(A, B) || isSubStructure(A->left, B) || isSubStructure(A->right, B)); } private: bool recur(TreeNode* A, TreeNode* B) { if(B == nullptr) return true; if(A == nullptr || A->val != B->val) return false; return recur(A->left, B->left) && recur(A->right, B->right); } };

最后

以上就是尊敬发夹最近收集整理的关于LeetCode(剑指 Offer)- 26. 树的子结构的全部内容,更多相关LeetCode(剑指内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(100)

评论列表共有 0 条评论

立即
投稿
返回
顶部