二叉树结构
class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}
题目描述
解析
- 二叉树遍历算法的应用
- 原二叉树是否具有某棵子树,只需要判断每个结点是否都在二叉树中出现即可
- 第一步在树A中找到和B的根结点的值一样的结点R
- 第二步再判断树A中以R为根结点的子树是不是包含和树B一样的结构
递归实现
//判断根结点为root1的树是否包含root2结构public boolean hasSubtree(TreeNode root1,TreeNode root2) { //初始化标记变量为false boolean hasSubtreeFlag = false; //先判断根结点,若不包含判断左孩子,其次是右孩子 if(root1 != null && root2 != null){ if(root1.val == root2.val){ hasSubtreeFlag = nodesValEqual(root1,root2); } if(!hasSubtreeFlag){ hasSubtreeFlag = hasSubtree(root1.left,root2); } if(!hasSubtreeFlag){ hasSubtreeFlag = hasSubtree(root1.right,root2); } } return hasSubtreeFlag;}//判断以root1为根的树上各结点值是否与root2相等public boolean nodesValEqual(TreeNode root1, TreeNode root2) { if(root2 == null){ return true; } if(root1 == null){ return false; } if(root1.val != root2.val){ return false; } return nodesValEqual(root1.left,root2.left) && nodesValEqual(root1.right,root2.right);}<p></p>