輸入兩棵二叉樹a和b,判斷b是不是a的子結構。(約定空樹不是任意乙個樹的子結構)
b是a的子結構, 即 a中有出現和b相同的結構和節點值。
例如:給定的樹 a:
給定的樹 b:
返回 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
/**
* definition for a binary tree node.
* public class treenode
* }*/class solution
//a、b結點相等就開始比較子樹是否相等
if(a.val==b.val&&helper(a.left,b.left)&&helper(a.right,b.right))
//掃瞄a直到找到和b相等的點
return issubstructure(a.left,b)||issubstructure(a.right,b);
}public boolean helper(treenode a,treenode b)
return false;}}
因為要遍歷二叉樹,用深搜的遞迴、非遞迴,或者廣搜都是可以的
但是用廣蒐會超時
/**
* definition for a binary tree node.
* public class treenode
* }*/class solution
queuelist=new linkedlist<>();
list.offer(a);
while(!list.isempty())
if(node.left!=null)
if(node.right!=null)
}return false;
}public boolean bfs(treenode node,treenode b)
if(nodeb==null)
if(nodea.val!=nodeb.val)
queuea.offer(node.left);
queuea.offer(node.right);
queueb.offer(b.left);
queueb.offer(b.right);
}return true;}}
劍指offer 17 樹的子結構
輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 這是典型二叉樹遞迴問題。倆顆樹都不為空時,如果根節點相同,那麼判斷root2是不是root1的子樹,如果不是,那麼判斷root2是不是root1左子樹的子樹,如果還不是,那麼判斷root2是不是root1右子樹的...
劍指Offer (17)樹的子結構
題目描述 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 實現如下 分兩步 第一步 尋找與b樹根節點val相等的a樹節點。如果找到進入第二步,否則繼續尋找,直到找完a樹 第二步 以找的節點作為a樹子樹的根節點,同時遍歷兩棵樹,判斷是否所有節點都相同 特殊情況 ...
劍指offer(17)樹的子結構
19.1.11 題目描述 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 思修很簡單 遍歷a樹,每個a節點與b對比,對比函式為solution。如下 function treenode x function hassubtree proot1,proot2 r...