1. 程式人生 > 實用技巧 >輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)

輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)

思路: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=new
TreeNode(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; }