劍指offer刷題記錄17——樹的子結構
阿新 • • 發佈:2018-12-14
題目描述
輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)
解法一:遞迴
public class Solution { public boolean HasSubtree(TreeNode root1, TreeNode root2) { if(root1 == null || root2 == null) { return false; } if(isSubtree(root1, root2) == true) { return true; } return HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2); } public 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; } }
要注意在判斷是否為子結構的過程中,當B樹遍歷到最後一層的時候,A樹不一定是最後一層,所以如果B樹的最後一層符合子結構,則無所謂A樹是否為最後一層,可以返回true