JZ26 树的子结构
描述
输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构)
假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2},2个树的结构如下,可以看出B是A的子结构
数据范围:
0 <= A的节点个数 <= 10000
0 <= B的节点个数 <= 10000
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { private boolean recursion(TreeNode root1, TreeNode root2){ //当一个节点存在另一个不存在时 if(root1 == null && root2 != null) return false; //两个都为空则返回 if((root1 == null && root2 == null) || (root1 != null && root2 == null)) return true; //比较节点值 if(root1.val != root2.val) return false; //递归比较子树 return recursion(root1.left, root2.left) && recursion(root1.right, root2.right); } public boolean HasSubtree(TreeNode root1, TreeNode root2) { //空树 if(root2 == null) return false; //一个为空,另一个不为空 if(root1 == null && root2 != null) return false; //递归比较 boolean flag1 = recursion(root1, root2); //递归树1的每个节点 boolean flag2 = HasSubtree(root1.left, root2); boolean flag3 = HasSubtree(root1.right, root2); return flag1 || flag2 || flag3; } }