樹的子結構題解(java)

題目:

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

B是A的子結構, 即 A中有出現和B相同的結構和節點值。

例如:


給定的樹 A:

     3
    / \
   4   5
  / \
 1   2

給定的樹 B:

   4 
  /
 1

返回 true,因爲 B 與 A 的一個子樹擁有相同的結構和節點值。

 

示例 1:

輸入:A = [1,2,3], B = [3,1]
輸出:false

示例 2:

輸入:A = [3,4,5,1,2], B = [4,1]
輸出:true
限制:

0 <= 節點個數 <= 10000

解題思路:

遍歷A樹,找到值和B樹根節點值相同的節點,找到之後就進行遍歷比較。

代碼:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isSubStructure(TreeNode A, TreeNode B) {
        if(B == null || A == null) {
            return false;
        }
        //遍歷A,尋找值和B的根節點的值相等的節點
        return search(A,B);
    }


    private boolean search(TreeNode A,TreeNode B) {
        if(A == null) {
            return false;
        }

        //找到一個候選節點(值和B的值相同),進行比較
        if(A.val == B.val && compare(A, B)) {
            return true;
        }
        return search(A.left, B) || search(A.right, B);

    }

    private boolean compare(TreeNode A, TreeNode B) {
        if(B == null) {
            return true;
        }
        if(A == null) {
            return false;
        }
        if(A.val != B.val) {
            return false;
        }
        return compare(A.left, B.left) && compare(A.right, B.right);
        
    }
}

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章