题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路
先遍历主树,找到和子结构中根节点一样的节点,然后检验左子树,检验右子树
代码
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
| static public boolean HasSubtree(TreeNode root1,TreeNode root2) { boolean result = false; if (root1!=null&&root2!=null) { if (root1.val==root2.val) { result = a(root1,root2); } if (!result) { result = HasSubtree(root1.left,root2); } if (!result) { result = HasSubtree(root1.right,root2); } } return result; } static public boolean a(TreeNode root1,TreeNode root2) { if (root2==null) return true; if (root1==null) return false; if (root1.val!=root2.val) return false; return a(root1.left,root2)&&a(root1.right,root2); }
|
收获
- 树的操作要比链表更难一些;一定要注意指针;
- 递归嵌套递归;虽然不太能写的出来,但是结构简单,代码整洁;