Leetcode 100 相同的樹

2021-09-12 18:20:38 字數 2122 閱讀 2850

給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。

如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。

示例 1:

輸入:       1         1

/ \ / \

2 3 2 3

[1,2,3], [1,2,3]

輸出: true

示例 2:

輸入: 1 1

/ \

2 2

[1,2], [1,null,2]

輸出: false

示例 3::

輸入: 1 1

/ \ / \

2 1 1 2

[1,2,1], [1,1,2]

輸出: false

大多數的二叉樹題目都是用遞迴可以解的。所以當拿到二叉樹的題目的時候,我們首先就是看看能拆解成哪些子問題。

這個問題的子問題很簡單,就是左子樹,右子樹都相等的二叉樹是相同的二叉樹。

/**

* definition for a binary tree node.

* public class treenode

* }*/class solution else if (p == null || q == null)

if (p.val == q.val) else }}

那如果用非遞迴解怎麼解呢?

如果遇到二叉樹的問題,沒思路還有第二招,就是想想看是不是遍歷的變種

我們可以用佇列,一起進行層序遍歷,同時比較左右兩顆樹:

/**

* definition for a binary tree node.

* public class treenode

* }*/class solution else if (p == null || q == null)

linkedlistqueue = new linkedlist<>();

queue.add(p);

queue.add(q);

while(!queue.isempty()) else if (left == null || right == null) else if (left.val != right.val)

// 左子樹入隊

queue.add(left.left);

queue.add(right.left);

// 右子樹入隊

queue.add(left.right);

queue.add(right.right);

}return true;}}

其實我們本質上就是要比較左右兩棵樹,也沒必要非要是佇列,其實stack也是可以的,大同小異。所以並不是你記住哪種資料結構,關鍵是你能理解後,靈活應用.

LeetCode 100 相同的樹

題目描述 給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。示例 輸入 1 1 2 3 2 3 1,2,3 1,2,3 輸出 true輸入 1 1 2 2 1,2 1,null,2 輸出 false輸入 1 1 2 1 1 2 1,2,...

LeetCode 100 相同的樹

給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。示例 1 輸入 1 1 2 3 2 3 1,2,3 1,2,3 輸出 true示例 2 輸入 1 1 2 2 1,2 1,null,2 輸出 false示例 3 輸入 1 1 2 1 1...

leetcode100 相同的樹

給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。示例 1 輸入 1 1 2 3 2 3 1,2,3 1,2,3 輸出 true 示例 2 輸入 1 1 2 2 1,2 1,null,2 輸出 false 示例 3 輸入 1 1 2 1...