輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)
阿新 • • 發佈:2020-08-06
思路:1.hasTree中如果兩個樹都空 不是子樹,否則進入isTree,以及root1左移一個節點繼續判斷是否子樹,root1右移一個節點繼續判斷
// 2.isTree 中如果tree2為空,匹配成功,tree1為空tree2不為空,匹配失敗 如果根節點相同,root1和root2分別左移和右移一個節點 繼續判斷isTree
public static void main(String []arg){ TreeNode tr=new TreeNode(8); tr.left=new TreeNode(8); tr.right=newTreeNode(7); tr.left.left=new TreeNode(9); tr.left.right=new TreeNode(2); tr.left.right.left=new TreeNode(4); tr.left.right.right=new TreeNode(7); TreeNode t=new TreeNode(8); t.left=new TreeNode(9); t.right=new TreeNode(2); System.out.println(HasSubtree(tr,t)); }public static boolean HasSubtree(TreeNode root1,TreeNode root2) { if(root1==null||root2==null){ return false; } return isSubTree(root1,root2)||HasSubtree(root1.left,root2)||HasSubtree(root1.right,root2); } public static boolean isSubTree(TreeNode root1,TreeNode root2){if(root2==null){ return true; } if(root1==null) return false; if(root1.val==root2.val){ return isSubTree(root1.left,root2.left)&&isSubTree(root1.right,root2.right); } return false; }