題目:
解析:
這個題目的目的很明確,就是判斷a是否包含b。這裡的做法是對兩顆二叉樹分別求先序遍歷,接著比較。但是要注意的是,先序遍歷需要進行特殊處理。
舉例:
先對整a棵樹進行先序遍歷,序列為12453。
情況一:假設b二叉樹只有乙個節點3,那麼b子樹的先序遍歷序列就是3,接著判斷3是否為12453的子串,這裡顯然是,但是這只是簡單的一種情況。
情況二:假設b二叉樹只有乙個節點2,那麼如果直接判斷2是否為12453的子串是不能得到正確的答案的,因為a中2還有子節點,所以在遍歷a樹的時候要進行一些處理。
處理的方法就是,如果乙個節點的左子樹為空,在序列後加上乙個特殊符號(不能是二叉樹節點),比如「-」,當右子樹為空時加上「+」,這樣問題就解決了。
處理後a的序列為124-+5-+3-+ (相當於把葉子節點標示出來)
回到情況二,這個時候如果b樹的遍歷序列變成了2-+,這個串並不是a序列的子串,所以正確。
**:
1package
com.fndroid;23
4public
class
main
1011
public
boolean
chkidentical(treenode a, treenode b)
1819
public
void
un(treenode root, stringbuilder sb) else
26if (root.right != null
) else31}
3233
public
class
treenode 41}
42 }
面試題 04 10 檢查子樹
面試題 04.10.檢查子樹 中等題 遞迴 檢查子樹。你有兩棵非常大的二叉樹 t1,有幾萬個節點 t2,有幾萬個節點。設計乙個演算法,判斷 t2 是否為 t1 的子樹。如果 t1 有這麼乙個節點 n,其子樹與 t2 一模一樣,則 t2 為 t1 的子樹,也就是說,從節點 n 處把樹砍斷,得到的樹與 ...
面試題04 10 檢查子樹
題目鏈結 檢查子樹。你有兩棵非常大的二叉樹 t1,有幾萬個節點 t2,有幾萬個節點。設計乙個演算法,判斷 t2 是否為 t1 的子樹。如果 t1 有這麼乙個節點 n,其子樹與 t2 一模一樣,則 t2 為 t1 的子樹,也就是說,從節點 n 處把樹砍斷,得到的樹與 t2 完全相同。示例1 輸入 t1...
演算法面試題
1 兩個有序的陣列求中位數 時間複雜度o log n m 這個演算法有一定的缺陷,僅做參考 2 如何解決hash衝突 3 調整陣列順序使奇數字於偶數前面 void reorderoddeven int pdata,unsigned int length 4 鍊錶中倒數第k個節點 listnode f...