Learn More →
Learn More →
Given the roots of two binary trees p
and q
, write a function to check if they are the same or not.
Two binary trees are considered the same if they are structurally identical, and the nodes have the same value.
Example 1.
Learn More →
Input: p = [1,2,3], q = [1,2,3]
Output: true
Example 2.
Learn More →
Input: p = [1,2,1], q = [1,1,2]
Output: false
本題目的是要比對兩棵給定的 trees 的所有對應位置的 nodes 都相同。
這題其實就是 binary tree traversal 的應用問題,不論用 preorder, inorder, 或 postorder traversal 都可以得到解答,在這邊我們就只講解 postorder traversal 的解法。
使用 postorder traversal 解法的程式碼如下所示:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
if (!p && !q) // 兩棵 trees 都 traverse 到底沒有遇到不同的 nodes
return true;
if (!p || !q) // 有一棵 tree 先走到底
return false;
// postorder traversal
if (!isSameTree(p->left, q->left)) // 先走訪兩棵 trees 的左 subtrees
return false;
if (!isSameTree(p->right, q->right)) // 再走訪它們的右 subtrees
return false;
return p->val == q->val; // 最後比較父 node 是否相同
}
};
Postorder traversal 的作法從第 20 行開始,我們會同時走訪兩棵 trees 的左 subtree,只是走訪的函示是用 isSameTree
,接著走訪右 subtree,最後在比對父 nodes 是否相同。
每次走訪左右 subtrees 都會回傳其是否為相同的 subtree。主要判斷 nodes 是否相同的部分有三處,首先是判斷兩棵 trees 走訪到最後是不是同時都走訪到底了,也就是第 15 行的判斷,這代表兩棵 trees 到目前走訪的 nodes 都相同。接著第 17 行會判斷是否有一棵 tree 先走訪完了但另一棵還沒,這種情況代表兩棵 trees 就不同了,最後就是第 24 行 postorder 最後走訪父 node 時的比對其是否相同,因為左右 subtrees 在前面走訪時就已經比完了。
時間複雜度上,要比對兩棵 tree 是否相同就勢必走訪其所有 nodes 進行比對,所以複雜度為
空間複雜度上,因為是 recursive 的解法,需要存函式的 stack,其複雜度為
為一描述所有可計算的函式的數學模型,也就是此模型可計算所有演算法上可計算的問題。
Jun 25, 2024宇宙論時期
Mar 31, 2024結果不確定的實驗、現象、情況的量化
Nov 25, 2023希臘自然哲學發展至西元前 5 世紀中葉,已逐漸喪失獨創性,大多重複先前已經定型的自然哲學理論。哲學思維轉向語言、文法、修辭、知識、法律、歷史、習俗、倫理、宗教、音樂等人存在本身的問題。 詭智學派 (辯士學派) (Sophist) 世襲制度結束,民主制度對於法律、演講等的需要,使得詭智學派的興起。其主要在文法修辭討論,為教師教人如何在法庭勝訴,在政壇上發揮雄辯才華。 詭智學派一方面想反對威權式的規範性概念,另一方面還要接受道德的底線,所以衍伸出道德的直覺。他們在打破傳統,並著重在主觀權力之中,但抹煞客觀的權力。 詭智學派是古希臘地一個懷疑主義,懷疑主義是哲學討論的重要核心。 宇宙論時期哲學家在探討知識的價值時有各式不同的觀點,有的是唯物主義、有的是變動等等。這衍伸出一個問題: 同樣的知識同樣的真理卻有不同的觀點,因此有人開始探討最核心的問題不是知識到底是什麼,而是知識本身到底有沒有固定的價值。詭智學派開始問說到底有沒有知識,如果有那為什麼答案一大堆,如果沒有那我們說什麼知識就是什麼 -- 【知識的本身是空的,一切都是說出來的。】
Nov 20, 2022or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up