1、暴力
暴力解法就是針對原樹中的每乙個結點和其子樹與標定的子樹作對比,利用遞迴相當於回溯的概念
2、匹配過程中加入kmp
在匹配過程中,b數是a樹的子串的話,說明符合條件。但是針對本題來說,可能會出現以下情況:
a根為1,左結點為2,右節點為null,b根為1,左結點為null,右節點為2,此時兩者的先序遍歷就是相同的,所以需要在原樹中插入左空結點或者右空節點標識
(1)將a樹的先序遍歷以及b數的先序遍歷儲存起來
(2)利用kmp演算法判斷b是否是a的子串
1、暴力
class
solution
bool
dfs(treenode *o, treenode *t)
bool
issubtree
(treenode *s, treenode *t)
};
2、加入匹配串class
solution
void
getdfsorder
(treenode *o, vector <
int>
&tar)
bool
kmp(
)//以上就更新了子串t的next陣列(fail陣列),即下標陣列
for(
int i =
0, j =-1
; i < slen;
++i)
return
false;}
bool
issubtree
(treenode* s, treenode* t)
};
另乙個樹的子樹
給定兩個非空二叉樹 s 和 t,檢驗 s 中是否包含和 t 具有相同結構和節點值的子樹。s 的乙個子樹包括 s 的乙個節點和這個節點的所有子孫。s 也可以看做它自身的一棵子樹。示例 1 給定的樹 s 3 4 5 1 2 給定的樹 t 4 1 2 返回 true,因為 t 與 s 的乙個子樹擁有相同的...
另乙個樹的子樹
給定兩個非空二叉樹 s 和 t,檢驗 s 中是否包含和 t 具有相同結構和節點值的子樹。s 的乙個子樹包括 s 的乙個節點和這個節點的所有子孫。s 也可以看做它自身的一棵子樹。遞迴class solution object def issubtree self,s,t def ifsame s,t ...
另乙個樹的子樹
給定兩個非空二叉樹 s 和 t,檢驗 s 中是否包含和 t 具有相同結構和節點值的子樹。s 的乙個子樹包括 s 的乙個節點和這個節點的所有子孫。s 也可以看做它自身的一棵子樹。示例 1 給定的樹 s 3 4 5 1 2 給定的樹 t 4 1 2 返回 true,因為 t 與 s 的乙個子樹擁有相同的...