树的子结构
Posted cold-windy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树的子结构相关的知识,希望对你有一定的参考价值。
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
直接递归,
递归结束条件:如果root2为空,返回true(提前判断了root2一开始就为空的情况),那么在root2不为空的情况下,root1为空,说明这里肯定不对,返回false;
主要逻辑判断:如果root1.val==root2.val,那么此时有两种情况,包含这个root节点是子结构的一部分,所以我们进入
如果不包含这个节点,我们就不能取这个root,所以进入
1
|
helper(root1.left,root2.left)&&helper(root1.right,root2.right) |
1
|
helper(root1.left,root2)||helper(root1.right,root2) |
回到开始,如果root1.val!=root2.val,也就是进入那个else判断,那么我们就直接返回这个结果就可以了。
1
|
helper(root1.left,root2)||helper(root1.right,root2) |
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
|
/** public class TreeNode int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) this.val = val;
*/ public class Solution public boolean HasSubtree(TreeNode root1,TreeNode root2) if (root2== null ) return false ; return helper(root1,root2);
public boolean helper(TreeNode root1,TreeNode root2)
if (root2== null ) return true ; if (root1== null ) return false ; if (root1.val==root2.val) return (helper(root1.left,root2.left)&&helper(root1.right,root2.right))||(helper(root1.left,root2)||helper(root1.right,root2)); else return helper(root1.left,root2)||helper(root1.right,root2);
|
以上是关于树的子结构的主要内容,如果未能解决你的问题,请参考以下文章