leetcode100 相同的樹

2021-09-11 08:21:55 字數 1503 閱讀 3735

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

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

示例 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

1.大多數的二叉樹題目都是用遞迴可以解的。

所以當拿到二叉樹的題目的時候,我們首先就是看看能拆解成哪些子問題。

這個問題的子問題很簡單,就是左子樹,右子樹都相等的二叉樹是相同的二叉樹。注意出口條件。

// 遞迴

public boolean issametree(treenode p, treenode q)

if (p == null || q == null)

if (p.val != q.val)

return issametree(p.left, q.left) && issametree(p.right, q.right);

}

2.用非遞迴解怎麼解呢?

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

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

// 非遞迴 兩棵樹層序比較

public boolean issametree2(treenode p, treenode q)

if (p == null || q == null)

queuequeue = new linkedlist<>();

queue.add(p);

queue.add(q);

while (!queue.isempty()) else if (first == null || second == null) else if (first.val != second.val)

// 左子樹入隊

queue.add(first.left);

queue.add(second.left);

// 右子樹入隊

queue.add(first.right);

queue.add(second.right);

} return true;

}

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

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