
1.题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
2.解题思路
大体思路是首先判断B的根节点和A的根节点是否相同(这里的相同是指节点的值相同并且左右子节点相同),如果相同比较他们的左右子节点,这一步骤是相同的,可以用递归完成,直到B遍历到每个尾节点,如果这一过程比较的所有节点是相同的,则证明B是A的子结构。如果B的根节点和A的根节点不同,则A向他的左右子节点滑动,然后继续跟B的子节点比较,步骤同上。
(1) 如果root1.val==root2.val,那个就以这个为起点判断是否A包含B
(2) 如果没找到,就以root1.left作为起点继续判断A是否包含B
(3) 如果没找到,再以root1.right作为起点判断A是否包含B
3.代码
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
|
public class {
public boolean HasSubtree(TreeNode root1, TreeNode root2) {
boolean result = false; if (root2 != null && root1 != null) { if(root1.val == root2.val){ result = doesTree1HaveTree(root1,root2);
}
if (!result) { result = HasSubtree(root1.left,root2); }
if (!result) { result = HasSubtree(root1.right,root2); } } return result; } public boolean doesTree1HaveTree(TreeNode node1, TreeNode node2) {
if (node2 == null) { return true; } if (node1 == null) { return false; } if (node1.val != node2.val) { return false; } return doesTree1HaveTree(node1.left,node2.left) && doesTree1HaveTree(node1.right,node2.right);
} }
|
近期评论