【刷算法】一棵樹是不是另外一棵樹的子結構

題目描述

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

分析

假設樹A的根節點ra和樹B的根節點rb值相同,那麼接下來就以這兩個節點開始依次比較ra.left和rb.left、ra.right和rb.right,過程當中只要有一個不相同則返回;繼續比較ra.left和rb是否相同、ra.right和rb是否相同,就這樣依次進行下去,時間複雜度則爲O(樹A的節點數)*O(樹B的節點數)ui

代碼實現

/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
function HasSubtree(r1, r2)
{    
    if(r1 === null || r2 === null)
        return false;
    return check(r1, r2) || HasSubtree(r1.left, r2) || HasSubtree(r1.right, r2);
}
function check(a,b){
    if(b === null)
        return true;
    if(a === null || a.val !== b.val)
        return false;
    return check(a.left, b.left) && check(a.right, b.right);
}
複製代碼
相關文章
相關標籤/搜索