劍指offer(17)樹的子結構
阿新 • • 發佈:2018-09-06
ont 題目 說明 我們 itl btree -s font 可能
題目描述:
輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)解題代碼:
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
function HasSubtree(pRoot1, pRoot2)
{
// write code here
var result = false;
//定義result為false,如果pRoot1或pRoot2為空,直接返回result
//聲明一個函數isSubtree,對pRoot1和pRoot2調用isSubtree,返回false後接著檢測pRoot1的左子樹和右子樹
if(pRoot1 != null && pRoot2 != null){
result = isSubtree(pRoot1,pRoot2);
if(!result){
result = HasSubtree(pRoot1.left,pRoot2);
}
if(!result){
result = HasSubtree(pRoot1.right,pRoot2);
}
}
return result;
}
//當root1和root2的值不相等時直接返回false,再對root1和root2的左右子樹分別遞歸調用isSubtree
//除了第一次,root和root2都不可能為空(在HasSubtree中有控制條件),後面如果root2為空的話說明root2是root1的子樹,返回true,root1為空返回false
function isSubtree(root1,root2){
if(!root2){
return true;
}
if(!root1){
return false;
}
if(root1.val != root2.val){
return false;
}
return isSubtree(root1.left,root2.left) && isSubtree(root1.right,root2.right);
}
劍指offer(17)樹的子結構