演算法面試題 拓撲結構相同子樹

2022-03-29 03:37:42 字數 1098 閱讀 8575

題目:

解析:

這個題目的目的很明確,就是判斷a是否包含b。這裡的做法是對兩顆二叉樹分別求先序遍歷,接著比較。但是要注意的是,先序遍歷需要進行特殊處理。

舉例:

先對整a棵樹進行先序遍歷,序列為12453。

情況一:假設b二叉樹只有乙個節點3,那麼b子樹的先序遍歷序列就是3,接著判斷3是否為12453的子串,這裡顯然是,但是這只是簡單的一種情況。

情況二:假設b二叉樹只有乙個節點2,那麼如果直接判斷2是否為12453的子串是不能得到正確的答案的,因為a中2還有子節點,所以在遍歷a樹的時候要進行一些處理。

處理的方法就是,如果乙個節點的左子樹為空,在序列後加上乙個特殊符號(不能是二叉樹節點),比如「-」,當右子樹為空時加上「+」,這樣問題就解決了。

處理後a的序列為124-+5-+3-+ (相當於把葉子節點標示出來)

回到情況二,這個時候如果b樹的遍歷序列變成了2-+,這個串並不是a序列的子串,所以正確。

**:

1

package

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...