1. 程式人生 > >劍指offer刷題記錄17——樹的子結構

劍指offer刷題記錄17——樹的子結構

題目描述

輸入兩棵二叉樹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