判斷樹T2是否為T1的子樹

2021-07-16 10:39:33 字數 1254 閱讀 2404

你有兩顆非常大的二叉樹:t1,有幾百萬個節點;t2有幾百個節點。

設計乙個演算法,判斷t2是否為t1的子樹。

如果t1有乙個節點n,其子樹與t2一模一樣,則t2為t1的子樹。也就是說,從節點n

處把樹砍斷,得到的樹與t2完全相同。

方法一:在規模較小且較簡單的問題中,我們可以建立乙個字串,表示中序和前序遍歷結果。若t2的前序遍歷是t1前序遍歷的子串,並且t2中序遍歷是t1中序遍歷的子串,則t2是t1的子樹。

方法二:搜尋較大的樹t1,每當t1的某個節點與t2的根節點相同時,就呼叫matchtree方法判斷t1子樹與t2是否完全匹配;

/*

題目:你有兩顆非常大的二叉樹:t1,有幾百萬個節點;t2有幾百個節點。

設計乙個演算法,判斷t2是否為t1的子樹。

如果t1有乙個節點n,其子樹與t2一模一樣,則t2為t1的子樹。也就是說,從節點n

處把樹砍斷,得到的樹與t2完全相同。

*/#include #include #include #include using namespace std;

/*二叉樹節點資料結構*/

struct treenode

};const int flag = int_max;

treenode *generatetree(vector&nums)

//定義非空右子樹

if (i + 1 < size && nums[i + 1] != flag)

tmp->left = left;

tmp->right = right;

//彈出當前處理的節點

que.pop();

} return root;

}class solution

/*判斷t2是否為t1的子樹*/

bool subtree(treenode *t1, treenode *t2)

/*判斷兩顆樹是否完全一致*/

bool matchtree(treenode *t1, treenode *t2) };

int main()

; treenode *t1 = generatetree(v1);

vectorv2 = ;

treenode *t2 = generatetree(v2);

cout << solution().containstree(t1, t2) << endl;

system("pause");

return 0;

}

SIP協議中的T1和T2

sip協議中的t1和t2 因為sip定義了自己的可靠性機制,所以可以使用不可靠的傳輸層協議,比方說udp,來進行連線。使用udp來傳輸sip時,訊息的丟失和接受訊息的順序錯亂都是有可能的。因為udp只能保證傳輸的內容是無錯的,但是不能保證傳輸的內容一定會到達目的地。sip的可靠性機制包括 1.重傳計...

考試總結T2(接上次整的T1)

首先說一句,樹的每個元素的名稱的問題,那個叫jie點的東西 具體是節點還是結點.baidu百科寫的是結點.本文章將不考慮到底這倆字怎麼寫.所以兩種都可能出現 t2描述 扶蘇翻遍了歌單卻沒有找到一首歌能做這個題的題目背景,於是放上了扶蘇最喜歡的一首 不老夢 與day1的第二題一樣,今天的第二題依然是一...

磁共振中的T1, T2 和 T2 的原理和區別

從物理的角度,要理解這幾個概念的區別,需要對原子核的磁化有所了解,本文通過一些圖示對這幾個概念進行簡明的介紹。首先,磁共振最基本的原理就是氫原子核在磁場中自旋運動時所具有的量子力學特性。在乙個均勻磁場b0中,氫原子核的旋轉 spin 會出現兩種自旋狀態,一種是沿著磁場方向 up狀態 一種是沿著磁場反...